Bonjour à tous,
je suis relativement nouveau dans le domaine de XSL(T) et bute contre le problème suivant.
La structure de mon document initial ressemble à ceci:
En sortie, je dois un document XML par fils, en imbriquant chaque noeud fils (ainsi que ses fils et attributs) dans le root et en y insérant header et son contenu (attributs y compris), soit, si mon document initial contient 2 fils (il peut en contenir plusieurs centaines et chaque fils est identifiable par un ID unique):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <parent> <header> <foo>...</foo> <bar>...</bar> </header> <fils> <attr1>A</attr1> <attr2>...</attr2> </fils> <fils> <attr1>B</attr1> <attr2>...</attr2> </fils> </parent>
Et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <parent> <header> <foo>...</foo> <bar>...</bar> </header> <fils> <attr1>A</attr1> <attr2>...</attr2> </fils> </parent>
Pour la création des fichiers XML par fils, j'utilise la balise "exsl:document". J'ai tenté plusieurs approches et ne suis pas loin du résultat en utilisant le mapping suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <parent> <header> <foo>...</foo> <bar>...</bar> </header> <fils> <attr1>B</attr1> <attr2>...</attr2> </fils> </parent>
Cependant il reste (au moins) 2 problèmes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <xsl:template match="fils"> <exsl:document href="{./attr1}.xml" method="xml"> <xsl:copy select="../*" > <xsl:copy-of select="../header" /> <xsl:copy-of select="." /> </xsl:copy> </exsl:document> </xsl:template>
1) Avec la ligne 3, j'essaie de récupérer mon noeud racine (qui contient les infos de namespaces) mais malgré différents essais, j'obtiens toujours une balise "fils". Je pense que quelque chose m'échappe quand à l'exécution de la transformation et/ou aux expressions XPath.
2) Dans le document initial, ni le header ni les fils ne contiennent les infos des namespaces (elles sont au niveau du root) mais dans la version transformée, elles sont ajoutées au niveau du header et du fils.
Pourriez-vous m'éclairer/me mettre sur la voie afin de solutionner ces deux points?
D'avance, un grand merci.
Partager