Bonjour à tous...

Je reprend le code de mon prédecesseur (et par la même je découvre le xsl), et j'ai un petit soucis lorsque le code xml est généré...

en effet, il me met dans le code html une balise <para> qui n'est pas censée exister !!

le code pour plus d'explications :

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" standalone="yes" indent="yes" />

  <!-- CE PARAMETRE DEFINIT LE REPERTOIRE RACINE DES IMAGES -->
  <xsl:param name="root" />
  <!-- DERNIERE MODIFICATION -->
  <xsl:param name="time" />
  <!-- NOM DU FICHIER -->
  <xsl:param name="article" />
  <!-- EST-CE L'INDEX ? -->
  <xsl:param name="index" />
  <!-- ARTICLE SUIVANT -->
  <xsl:param name="prev" />
  <!-- ARTICLE PRECEDENT -->
  <xsl:param name="next" />
  <!-- DERNIER ARTICLE -->
  <xsl:param name="last" />
  <!-- RACINE DU SITE -->
  <xsl:param name="siteRoot" />
  <!-- LANGUE -->
  <xsl:param name="lang" />

  
    <!--Introduction du code html dans les articles-->
  
	<xsl:template name="Html" match="a | applet | b | big | br | caption | cite |
code | col | colgroup | dd | div | dl | dt | em | font | form | frame |
frameset | head | h1 | h2 | h3 | h4 | h5 | h6 | hr | i | iframe | img
| link | li | map | noframes | ol | p | param | pre | s | small | span | strong | style | sub | sup | td | th | title | tr | tt | ul | var | table" >
		<xsl:copy>
			<xsl:copy-of select="@*"/>
			<xsl:apply-templates/>
		</xsl:copy>
	</xsl:template> 

	<!-- RACINE DU DOCUMENT -->
	<xsl:template match="/">
		<xsl:apply-templates/>
	</xsl:template>
	
	<xsl:template match="article">
		
		<xsl:for-each select="para">		
				<xsl:call-template name="Html"/>
		</xsl:for-each>
  		
		<h1> <xsl:value-of disable-output-escaping="yes" select="title" /> </h1>
     	
		<xsl:for-each select="sect1"> 
    		<xsl:if test="title">
				<h2> <xsl:value-of select="title"/>	</h2>
    		</xsl:if>
			
			<xsl:for-each select="formalpara">
				<xsl:if test="title">
					<h3> <xsl:value-of select="title"/> </h3>
    			</xsl:if>
  				
				<xsl:for-each select="para">	
					<p> <xsl:call-template name="Html"/> </p>
				</xsl:for-each>
 			</xsl:for-each>
		</xsl:for-each>
	
	</xsl:template>

</xsl:stylesheet>


<?xml version="1.0"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
]>
<article>
		<para>	TEXTE ET BALISES HTML </para>
	<title lang="fr">TITRE 1</title>
	<sect1>
		<title lang="fr">TITRE OPTIONNEL</title>
		<formalpara>
			<para> TEXTE ET BALISES HTML </para>
		</formalpara> 
		<formalpara>
			<para lang="fr">TEXTE ET BALISES HTML </para>
		</formalpara>
	</sect1>
	<sect1>	
		<formalpara>
			<para>ETC ETC ETC ETC</para>				
		</formalpara>
	</sect1>
</article>


LE CODE HTML généré :

<para>	
	TEXTE ET BALISES HTML
</para>
	<H1>TITRE 1</H1>
	<H2>TITRE OPTIONNEL</H2>
	<p> <para> TEXTE ET BALISES HTML </para> </p>
	<p> <para>ETC ETC ETC ETC</para> </p>				

Modifié par erokare (27 Jul 2006 - 12:04)
Lorsque tu utilise les balises xslt
<xsl:call-template name="Html"/>

celles-ci s'appliquent sur le noeud courant, à savoir <para>...</para>.
Il suffit donc de les remplacer par :
<xsl:apply-templates />

qui s'appliquera lui seulement aux noeuds fils.

En écrivant les 'for-each' de cette manière

<xsl:for-each select="para">		
      <p><xsl:apply-templates/></p>
</xsl:for-each>

tu devrais obtenir le résultat souhaité, enfin j'espere.
Effectivement ça marche... merci beaucoup...

Par contre à quoi me sert ce template HTml ? (vu que plus rien ne l'appelle)
Et bien, le template Html permet de recopier d'éventuelles balises Html qui se trouverait dans les balises <para> du document XML, ainsi que leur contenu.
Essaye donc d'ajouter des balises listées dans l'attribut 'match' du template (<a></a>, <br/>, <strong> ...) , tu verras elles devraient se retrouver dans le document final.