XSL acces au nom des balises

Résolu/Fermé
marc - 29 août 2005 à 11:28
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 - 29 août 2005 à 16:07
Bonjour,

j'ai un probleme très simple a resoudre, mais je n'ai pas trouvé la fonction adéquate...
J'ai un fichier xml de forme minimale:
<groupe titre="" montant="">
<groupe titre="" montant="">
<atome>
<Code></Code>
<Designation></Designation>
<Unite></Unite>
<Quantite></Quantite>
<PrixUnitaire></PrixUnitaire>
<Montant></Montant>
</atome>
</groupe>
</groupe>

sachant qu'un "groupe" contient soit des "groupe" soit des "atome".

Je désire effectuer un test (récursif) <xsl:if > sur le type de balise.
en pseudo langage:
pour chaque "groupe" (inclu tous les descendants),
si il n'existe pas d'enfant "atome", alors ...
sinon ...

Mon probleme réside dans le fait que je n'arrive pas a faire le test sur la balise "atome" en elle meme. J'ai essayé avec xsl:node-name, mais je n'ai pas réussi...

Merci d'avance pour vos réponses,
Marc

3 réponses

teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
29 août 2005 à 12:51
Salut, je comprend sans doute pas bien le problème...

tu fais un pour chaque groupe/atome
et après pour référencer ton groupe tu utilises ../
Non?
0
Effectivement, ce que tu me suggeres fonctionnent bien, mais ce n'est pas exactement ce dont j'ai besoin.

En fait, j'ai un fichier xml (celui que j'ai détaillé plus haut) dont les données sont à inclure dans un autre fichier xml avec des balises précises. Ce que je fais, c'est que je construis le second fichiers xml en appliquant une xslt sur le 1er.
Mon probleme est donc le suivant:
les "groupe" doivent s'imbriquer les uns dans les autres, et lorsque le dernier groupe ne contient que des "atome", je dois inclure les données relatives à l' "atome" dans des balises spécifiques.

ex: mon 2nd fichier xml doit ressembler à ca:
<balise1 id="titre du groupe parent">
<balise1 id="titre du groupe fils">
<balise2>
<balise3>Prix Unitaire:3.00</balise3>
<balise4>code:14584 </balise4>
</balise2>
</balise1>
</balise1>

les balises1,2,3 me sont imposées. Il s'agit en fait du principe des poupées russes... C'est pourquoi je pensais avoir besoin du "if", pour tester le type de noeud (groupe ou atome):
si l'enfant est un groupe, alors ecrire balise 1
sinon, ecrire balise2.
Donc mon probleme est double: recuperer le nom des balises, et réussir à insérer le contenu de "atome" dans la derniere balise2...

Est-ce maintenant plus clair maintenant teeboo?
vois tu une maniere de regler le probleme?
0
random Messages postés 1612 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 30 mars 2006 155
29 août 2005 à 13:51
supposons une hiérarchie de niveau 3 maxi
je demande le tri par niveau 1 2 3

pére fils atome
* * *
père pasnull fils pas null atome pas null je peux diriger vers atome
* *
ici atome est null je suis dans un groupe fils
etc...
pas certain d'avoir compris

0
de maniere encore plus simple:

pour chaque "group", faire:
si les enfants sont des "groupe", alors boucler
si les enfants sont des "atome", alors insérer balise2..

dans ce cas, je ne sais pas trop comment faire pour reboucler. J'ai testé apply-templates, sans succès...
0
teebo Messages postés 33491 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 24 février 2011 1 793
29 août 2005 à 16:07
Ben pour chaque élément tu apply-template groupe et pour les atomes celui d'atome, ça devrait marcher non?
0