[XSLT] Faire une transformation qui respecte mes CDATA ?

Stephane Bortzmeyer <[email protected]> Mon, 19 Nov 2007 12:05:28 +0100
Newsgroups gmane.text.xml.french.tech
Message-ID <[email protected]>
[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>

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 &lt;

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. 

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...

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.