Bonjour tout le monde,
J'ai un stylesheet qui faire fusionner les éléments au même nom et avec les même valeurs d'attributs. Le xslt marche bien en saxon, mais ne marche pas en xalan qu'en donnant "<test/>" en sortie. J'aimerais le faire fonctionner sous xalan. Merci d'avance pour tous vos conseilles.
xml source:
xml en sortie que je veux (obtenu sous saxon, mais pas sous xalan1.x):
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 <test> <A x="0"> <B>1</B> </A> <A x="0"> <C>2</C> </A> <A x="0"> <D x="0"> <E>3</E> </D> </A> <A x="0"> <D x="0"> <E>3</E> </D> </A> <A x="0"> <D x="1"> <E>5</E> </D> </A> <A x="1"> <B>4</B> </A> </test>
Le stylesheet xslt utilisé:
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 <test> <A x="0"> <B>1</B> <C>2</C> <D x="0"> <E>3</E> </D> <D x="1"> <E>5</E> </D> </A> <A x="1"> <B>4</B> </A> </test>
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 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl"> <xsl:output method="xml" indent="yes"/> <xsl:strip-space elements="*"/> <xsl:key name="element" match="*" use="concat(local-name(),@*)"/> <xsl:template match="*"> <xsl:copy> <xsl:copy-of select="@*"/> <xsl:variable name="set"> <xsl:copy-of select="key('element',concat(local-name(),@*))/*"/> </xsl:variable> <xsl:apply-templates select="text()"/> <xsl:apply-templates select="exsl:node-set($set)/*[generate-id()=generate-id(key('element',concat(local-name(),@*)))]"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Partager