Comment puis-je faire une copie exacte des enfants d'un nœud XML avec XSLT ?

StackOverflow https://stackoverflow.com/questions/56837

  •  09-06-2019
  •  | 
  •  

Question

Mon problème est que mon document XML contient des extraits de XHTML et, en le passant via un XSLT, j'aimerais qu'il restitue ces extraits sans les modifier.

J'ai essayé d'envelopper l'extrait dans un CDATA mais cela ne fonctionne pas car les valeurs inférieure et supérieure à sont traduites en < et > au lieu d'être renvoyées directement.

Quel est le XSL requis pour faire cela ?

Était-ce utile?

La solution

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

C'est ce qu'on appelle la « transformation de l'identité » dans le Spécification XSLT.

Autres conseils

J'ai rencontré ce problème et la copie de est certainement la plus simple à utiliser.L'identité fonctionne, mais cela représente 5 lignes de code et vous devrez appeler un tel modèle, pas seulement le définir tel quel dans votre document XSLT (sinon vous n'obtiendrez probablement pas ce que vous attendiez dans votre sortie.)

Mon principal problème était en fait de copier le contenu d’une balise, et non la balise elle-même.C'est en fait très facile à résoudre mais il m'a fallu un peu de temps pour le comprendre (peut-être parce que QtXmlPatterns plante pas mal !)

Ainsi, ce qui suit copie la balise nommée ici et tous ses enfants :

<xsl:copy-of select="this/tag/here"/>

Mais le plus souvent, vous ne souhaitez pas faire cela car <here> est en fait le conteneur, en d'autres termes, il ne doit pas apparaître dans la sortie.Dans ce cas, vous pouvez simplement faire ceci :

<xsl:copy-of select="this/tag/here/*"/>

Cela copie tous les enfants trouvés dans la balise nommée <ici>.

En supposant que votre xhtml soit dans un élément YYY

http://www.dpawson.co.uk/xsl/sect2/N1930.html explique les options

xsl: copie de

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top