[XSLT][Débutant]Eléments pas pris en compte
Bonjour,
Je débute en xslt, et j'ai un léger souci, certains éléments ne sont pas pris en compte lors de la transformation, exemple :
Voici mon fichier source :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <html>
...
<body>
<p>
<div class="class1"></div>
</p>
<div class="class2">
<p>
<div class="class1"></div>
</p>
</div>
</body>
</html> |
Le résultat escompté :
Code:
1 2 3 4 5 6
| <root>
<class1 path="/html/body/*/div[@class="class1"]"/>
<class2 path="/html/body/div[@class="class2"]">
<class3 path="/html/body/div[@class="class2"]/*/div[@class="class3"]"/>
</class2>
</root> |
Le résultat effectif :
Code:
1 2 3 4 5 6
| <root>
<!-- manque la class1-->
<class2 path="/html/body/div[@class="class2"]">
<class3 path="/html/body/div[@class="class2"]/*/div[@class="class3"]"/>
</class2>
</root> |
On constate, que l'élément P à la racine du BODY n'a pas été traitée, pourtant une même balise P à l'intérieur d'un élément DIV avec un attribut class(donc qui nous interesse) à été pris en compte plus bas.
Mon fichier de transformation XSLT
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| <xsl:template match="/*">
<xsl:apply-templates select="html:body"/>
</xsl:template>
<xsl:template match="html:body">
<root>
<xsl:call-template name="treat_element">
<xsl:with-param name="path">/html/body</xsl:with-param>
</xsl:call-template>
</root>
</xsl:template>
<xsl:template name="treat_element">
<xsl:param name="path"/>
<xsl:choose>
<xsl:when test="html:*[@class]">
<xsl:apply-templates select="html:*[@class]">
<xsl:with-param name="path" select="$path"/>
</xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="*">
<xsl:with-param name="path" select="$path"/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="*">
<xsl:param name="path"/>
<xsl:call-template name="treat_element">
<xsl:with-param name="path"><xsl:value-of select="$path"/>/*</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template match="html:*[@class]">
...
</xsl:template> |
Je ne saisis pas où j'ai commis une erreur. Une idée de quoi cela provient ?
Merci de votre aide.
P.S.
J'imagine bien que mon code n'est pas très propre, désolé... je débute....