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.)
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();
		}
	}
 
}
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
 
<?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>
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
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>
voici la sortie :
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
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>
voici ce que j'ai en sortie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<?xml version="1.0" encoding="utf-8"?>8<liste2/>
dès lors que j'enlève le sort ça marche mais avec les résultats non triés
Quelqu'un a une idée ?