2008-09-11 15 views
3

Mon problème est que mon document XML contient des extraits de XHTML à l'intérieur et en passant à travers un XSLT, je voudrais qu'il rende ces extraits sans les manipuler.Comment puis-je faire une copie exacte des enfants d'un noeud xml avec XSLT?

J'ai essayé d'encapsuler l'extrait dans un CDATA mais cela ne fonctionne pas car inférieur et supérieur à celui qui est converti en <et> au lieu d'être renvoyé directement en écho.

Quel est le XSL requis pour cela?

Répondre

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

Ceci est appelé la "transformation identitaire" dans le XSLT specification.

2

J'ai couru dans ce problème et la copie de est certainement le plus facile à utiliser. L'identité fonctionne, mais c'est 5 lignes de code et vous devez appeler un tel modèle, pas simplement le définir comme dans votre document XSLT (sinon vous n'obtiendrez probablement pas ce que vous attendiez dans votre sortie.)

Mon problème principal était de copier le contenu d'une balise, et non l'étiquette elle-même. Il est en fait très facile à résoudre, mais il m'a fallu un peu de temps pour le comprendre

Ainsi, les copies suivantes de la balise nommée ici et tous ses enfants (peut-être parce que QtXmlPatterns se bloque tout à fait un peu!):

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

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

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

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