Bonjour,
Je crois que je suis tombé sur un bug de Java, mais j'ai pas de solution, ça fait depuis ce matin que je cherche sur le web.
Je travaille sur linux avec le JDK 7 officiel d'oracle, mais c'est pareil avec l'openJDK7 et openJDK6
voici mon code java (ce qu'il y a de plus basique, il marche bien excepté dans ce cas précis.)
Voici un exemple de xml sur lequel nous allons travailler
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 import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; public class Xslt { public Transformer transformer; public Xslt(String cheminFichierXsl) throws TransformerConfigurationException{ TransformerFactory tf = TransformerFactory.newInstance(); transformer=tf.newTransformer(new StreamSource(cheminFichierXsl)); } public void transformation(String cheminFichierXml,String cheminFichierDestination){ try { System.out.println("transformation :"+cheminFichierXml); transformer.transform(new StreamSource(cheminFichierXml), new StreamResult(cheminFichierDestination)); } catch (TransformerException e) { e.printStackTrace(); } } }
et voici un exemple de code qui marche très bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <?xml version="1.0" encoding="utf-8"?> <Liste> <Personne nom="Truc"/> <Personne nom="Truc6"/> <Personne nom="Truc5"/> <Personne nom="Truc4"/> <Personne nom="Truc3"/> <Personne nom="Truc2"/> <Personne nom="Truc1"/> <Personne nom="Bruc"/> </Liste>
voici la sortie :
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 <?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" encoding="utf-8" indent="yes"/> <xsl:template match="/"> <xsl:variable name="listePersonne" select="Liste/Personne"/> <xsl:element name="liste2"> <xsl:for-each select="$listePersonne"> <xsl:sort select="@nom"/> <xsl:element name="Personne"> <xsl:value-of select="@nom"/> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <?xml version="1.0" encoding="utf-8"?><liste2> <Personne>Bruc</Personne> <Personne>Truc</Personne> <Personne>Truc1</Personne> <Personne>Truc2</Personne> <Personne>Truc3</Personne> <Personne>Truc4</Personne> <Personne>Truc5</Personne> <Personne>Truc6</Personne> </liste2>
ensuite je déporte le code du for-each dans un template avec un param. Le count est là pour montrer que le paramètre fonctionne
voici ce que j'ai en sortie
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 <?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" encoding="utf-8" indent="yes"/> <xsl:template match="/"> <xsl:variable name="listePersonne" select="Liste/Personne"/> <xsl:call-template name="afficherListe"> <xsl:with-param name="listePersonne" select="$listePersonne"/> </xsl:call-template> </xsl:template> <xsl:template name="afficherListe"> <xsl:param name="listePersonne"/> <xsl:value-of select="count($listePersonne)"/> <xsl:element name="liste2"> <xsl:for-each select="$listePersonne"> <xsl:sort select="@nom"/> <xsl:element name="Personne"> <xsl:value-of select="@nom"/> </xsl:element> </xsl:for-each> </xsl:element> </xsl:template> </xsl:stylesheet>
dès lors que j'enlève le sort ça marche mais avec les résultats non triés
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <?xml version="1.0" encoding="utf-8"?>8<liste2/>
Quelqu'un a une idée ?
Partager