Cette feuille de style:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="pSortingBy" select="/root/@sorting"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/root">
<xsl:copy>
<xsl:apply-templates select="node()|@*">
<xsl:sort select="*[name()=$pSortingBy]"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Avec cette entrée:
<root sorting="prop4">
<elem1>
<prop1>A</prop1>
<prop2>B</prop2>
<prop3>C</prop3>
<prop4>D</prop4>
<prop5>A</prop5>
</elem1>
<elem2>
<prop1>B</prop1>
<prop2>C</prop2>
<prop3>D</prop3>
<prop4>A</prop4>
<prop5>B</prop5>
</elem2>
<elem3>
<prop1>C</prop1>
<prop2>D</prop2>
<prop3>A</prop3>
<prop4>B</prop4>
<prop5>C</prop5>
</elem3>
</root>
Sortie:
<root sorting="prop4">
<elem2>
<prop1>B</prop1>
<prop2>C</prop2>
<prop3>D</prop3>
<prop4>A</prop4>
<prop5>B</prop5>
</elem2>
<elem3>
<prop1>C</prop1>
<prop2>D</prop2>
<prop3>A</prop3>
<prop4>B</prop4>
<prop5>C</prop5>
</elem3>
<elem1>
<prop1>A</prop1>
<prop2>B</prop2>
<prop3>C</prop3>
<prop4>D</prop4>
<prop5>A</prop5>
</elem1>
</root>
Remarque: Vous pouvez définir pSortingBy
param comme nom d'élément suivant les spécifications de votre processeur XSLT.
Modifier: Je ne suis pas un expert en java, mais je pense que vous pouvez faire:
javax.xml.transform.TransformerFactory transFact =
javax.xml.transform.TransformerFactory.newInstance();
javax.xml.transform.Transformer trans = transFact.newTransformer(xsltSource);
trans.setParameter("pSortingBy", "prop5");
On ne sait pas si vous voulez juste de définir l'expression de tri (très simple comme la réponse de Thorbjørn) ou vous vouloir passer la clé de tri en tant que paramètre. –
Je souhaite transmettre la clé de tri en tant que paramètre via l'API Transformer. Je mentionne le tag xsl: sort uniquement parce que c'était la seule méthode de tri que je pouvais trouver. – Adam