Bonjour,
Tout d'abord, le problème que j'énonce ci-dessous s'intègre dans un problème plus compliqué, donc ne vous demandez pas l'utilité de l'objectif (en réalité, le but est de créer, à partir d'un document xml contenant des balises d'inclusion de fichiers, le fichier résultant avec le contenu complet).
Je souhaite avoir une feuille de style XSLT pour copier intégralement (sans les commentaires), et sans changement, un fichier xml (et donc produire le même fichier en sortie). Pour cela, j'ai la feuille suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 <?xml version="1.0" encoding="ISO-8859-1"?> <!-- on définit un espace de nom spécifique f2lt --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- choisir method="xml" ou "html" suivant le type de sortie voulue --> <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" /> <xsl:template match="/"> <xsl:apply-templates select="*" /> </xsl:template> <!-- Consommation des commentaires --> <xsl:template match="comment()"></xsl:template> <!-- on traite tous les noeuds récursivement --> <xsl:template match="*"> <!-- on recopie la balise ouvrante --> <xsl:copy> <!-- on recopie tous les attributs --> <xsl:apply-templates select="@*" /> <!-- on recopie le texte --> <!--<xsl:value-of select="text()" />--> <xsl:apply-templates select="text()"/> <!-- on descend dans l'arbre --> <xsl:apply-templates select="./*" /> <!-- on recopie la balise fermante --> </xsl:copy> </xsl:template> <!-- on recopie un des attributs d'un noeud --> <xsl:template match="@*"> <xsl:copy> <xsl:apply-templates /> </xsl:copy> </xsl:template> <xsl:template match="text()"> <xsl:copy> <xsl:apply-templates /> </xsl:copy> </xsl:template> </xsl:stylesheet>
Le problème concerne les balises de type texte: dans mon fichier résultat, l'ordre de ces balises n'est pas conservé. Voici un exemple.
Fichier en entrée (c'est du docbook):
Fichier produit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <?xml version="1.0" encoding="UTF-8"?> <section id="sec1"> <title id="t1">PERE</title> <para> J'ai ici un paragraphe <emphasis>avec une emphase</emphasis> puis la suite du para; et puis <emphasis>une autre emphase ici</emphasis> terminée par un point. </para> Puis un texte pour terminer... </section>
Comme vous le voyez, le paragraphe est chamboulé!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 <?xml version="1.0" encoding="ISO-8859-1"?> <section id="sec1"> Puis un texte pour terminer... <title id="t1">PERE</title> <para> J'ai ici un paragraphe puis la suite du para; et puis terminée par un point. <emphasis>avec une emphase</emphasis> <emphasis>une autre emphase ici</emphasis> </para> </section>
Est-ce que vous voyez le problème? Car j'ai passé des heures dessus hier mais je n'ai pas réussi à le résoudre... Merci d'avance pour votre précieuse aide.
Partager