Bonjour,
Je tente de simplifier un fichier xml via une feuille xsl de la manière suivante:
En connaissant un noeud de mon arborescence, j'aimerai obtenir une nouvelle arborescence constituée de l'ascendance directe (que les parents, grands parents... racine), la fratrie , et la première génération suivante
Pour schématiser, on va dire que je pars de cette arborescence (en rouge le noeud que je connais et qui doit servir de "carrefour")
Code x : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 ROOT ├─E1 ├─E2 │ ├─E21 │ ├─E22 │ │ ├─E221 │ │ │ └─E2211 │ │ └─E222 │ └─E23 │ └─E231 └─E3
Le résultat que je souhaite obtenir est le suivant:
Code x : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 ROOT └─E2 ├─E21 ├─E22 │ ├─E221 │ └─E222 └─E23
Je connais le noeud carrefour grace a la valeur d'un de ses attributs que je transmets à mon xsl
Je peux ainsi démarrer de mon noeud carrefour de la manière suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <xsl:param name="req" /> <xsl:variable name="vreq" select="//*[@name = $req]" />
Si je fais comme ca, je ne sais pas comment faire pour remonter à la racine puis copier partiellement le xml en redescendant en ligne droite vers mon noeud carrefour...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <xsl:template match="/" > <xsl:apply-templates select="$vreq" /> </xsl:template>
Je pense qu'une meilleure facon de faire serait de partir de la racine et de copier tous les noeuds qui répondent à une des conditions suivantes:
- ce noeud est un ancêtre du noeud carrefour
- ce noeud appartient à la fratrie du noeud carrefour
- ce noeud est le noeud courant
- ce noeud est un fils du noeud carrefour
Cependant, je n'arrive pas à exprimer ces conditions à partir de ma variable...
Et je n'arrive pas à saisir si cette expression doit apparaitre dans un test ou dans un select... (ni si cette question est pertinente...)
J'aurais souhaité avoir votre avis sur la facon d'aborder le problème sachant que mes données initiales sont le xml (bien sur) et la valeur de l'attribut qui me permet de définir de manière unique mon noeud carrefour.
Merci d'avance pour vos commentaires
Partager