Tri avec recopie de l'arborescence
Bonjour à tous et merci d'avance de lire ces quelques lignes.
Donc voila depuis quelques jours je suis bloqué sur un script en xsl me permettant de trier des données xml. Voici mon xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<FILE NAME="toto">
<bulk xmlns:subs="sum.xsd" xmlns="config.xsd" xmlns:xn="generic.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="config.xsd config.xsd">
<config>
<subs:Data>
<subs:NID id="2">
blabla
</subs:NID>
<subs:NID id="3">
blibli
</subs:NID>
<subs:Ind id="1">
bloblo
</subs:Ind>
</subs:Data>
</config>
</bulk> |
J'aimerais en fait rentrer dans l'arborescence jusqu'à subs:Data et ensuite trier tous les fils. En effet même si ceux-ci on des noms(élément) différents, ils ont tous en commun un attribut id. Actuellement après plusieurs essais je suis parvenu à comprendre le système d'espace de nom pour pouvoir descendre proprement dans l'arborescence, mais j'ai deux problèmes concernant le tri.
J'ai utilisé deux méthodes pour pouvoir effectuer ce que je recherche :
La première me permet de trier mes éléments proprement mais elle ne copie pas l'arborescence en entier juste l'élément courant et la nouvelle réorganisation.
Xsl :
Code:
1 2 3 4 5
|
<xsl:for-each select="conf:bulk/conf:config/subs:Data/*">
<xsl:sort data-type="number" select="@id" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each> |
Resultat :
Code:
1 2 3 4 5 6 7 8 9 10
|
<subs:Ind id="1">
bloblo
</subs:Ind>
<subs:NID id="2">
blabla
</subs:NID>
<subs:NID id="3">
blibli
</subs:NID> |
Le tri est donc bien effectué mais je n'ai pas de recopie de l'arborescence en entier.
J'ai alors essayer de mettre cette ligne à la place de copy-of
Code:
1 2
|
<xsl:copy-of select="../../../.."/> |
Mais comment je m'y attendais, cela a en fait recopier l'arborescence la plus haute en écrasant le tri. J'ai quand même l'arborescence que je recherche. Je voudrais savoir donc si il y a une méthode pour mixer les deux pour que j'obtienne cela :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<FILE NAME="toto">
<bulk xmlns:subs="sum.xsd" xmlns="config.xsd" xmlns:xn="generic.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="config.xsd config.xsd">
<config>
<subs:Data>
<subs:Ind id="1">
bloblo
</subs:Ind>
<subs:NID id="2">
blabla
</subs:NID>
<subs:NID id="3">
blibli
</subs:NID>
</subs:Data>
</config>
</bulk> |
Merci d'avance d'avoir lu jusqu'ici :). Je précise que je ne suis pas un dieu en xsl étant donné que j'ai commencé cela il y a 4-5 jours :).
Bonne journée