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 :
Le résultat escompté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 effectif :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Mon fichier de transformation XSLT
Je ne saisis pas où j'ai commis une erreur. Une idée de quoi cela provient ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Merci de votre aide.
P.S.
J'imagine bien que mon code n'est pas très propre, désolé... je débute....
Partager