Re: [XSLT] Faire une transformation qui respecte mes CDATA ?
Stephane Bonhomme <[email protected]> Tue, 20 Nov 2007 09:30:00 +0100
| Newsgroups | gmane.text.xml.french.tech |
|---|---|
| Message-ID | <1195547400.16281.14.camel@citrouille> |
Le lundi 19 novembre 2007 à 12:05 +0100, Stephane Bortzmeyer a écrit :
> [Je pense que ce que je demande est impossible en XSLT mais je tente
> ma chance tout de même.]
>
> D'abord, le contexte : j'ai des documents XML, écrits à la main, qu'il
> me faut modifier en masse (des liens à changer, typiquement). Je peux
> écrire un script XSLT qui fait ce changement et ça marche. Ce script
> comprend cette règle pour copier :
>
> <xsl:template match="*|@*|comment()">
> <xsl:copy>
> <xsl:apply-templates select="@*|*|text()|comment()"/>
> </xsl:copy>
> </xsl:template>
>
En passant tu oublie les processing intructions : pour ma part
j'utilise :
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
Comme template identité.
> plus des règles spécifiques pour ce qui doit être transformé.
>
> Maintenant, mon problème : j'ai des sections CDATA qui contiennent de
> l'XML et qui sont transformées (testé avec 4suite et xsltproc) pour ne
> pas utiliser CDATA, les < étant remplacés par des <
>
> C'est certainement légal (l'infoset est le même) mais je souhaiterai
> garder du XML lisible dans mes CDATA, c'est plus facile à éditer.
>
Tout à fait
> Je crains que cela ne soit une demande irréaliste (l'interpréteur XSLT
> n'a même pas vu que c'était une CDATA, l'analyseur XML a fait cela
> pour lui) mais, au cas où quelqu'un aie une bonne idée... Sinon, je
> devrais utiliser sed ou équivalent, ce qui est assez casse-g...
>
Tout ce que tu peux faire en xslt, c'est spécifier quels éléments
verront leur contenu de type texte inclus dans des sections CDATA, c'est
le but de l'attribut cdata-section-elements de l'élément xsl output qui
permet de spécifier la liste des noms d'éléments ayant une telle
propriété en sortie. C'est certainement assez proche de ce que tu veux
faire. La contrainte étant que le contenu que tu veux sortir sous forme
d'entités CDATA soit toujours contenu dans le(s) meme(s) élement(s) et
qu'il(s) ne contienne(nt) que du contenu à sortir en CDATA.
> Question subsidiaire : et avec DOM ? A priori, on aura le même
> problème mais, si je me trompe, une solution DOM m'irait aussi.
>
Là il faut regarder du coté du serialiseur que tu utilises pour
transcrire ton dom en xml, s'il propose une option équivalente.
Stéphane.
--
Stéphane Bonhomme -- Exselt Services
Formations, Conseil et Réalisations en Ingénierie Documentaire,
Technologies Web et Logiciels Libres
[email protected] - http://www.exselt.com
04 57 39 30 78 / 06 88 57 27 08