Como posso fazer uma cópia exata dos filhos de um nó xml com XSLT?
Pergunta
Meu problema é que meu documento XML contém trechos de XHTML e, ao passá-lo por um XSLT, gostaria que ele renderizasse esses trechos sem deturpá-los.
Tentei agrupar o trecho em um CDATA, mas não funciona, pois menor que e maior que são traduzidos para < e > em vez de serem ecoados diretamente.
Qual é o XSL necessário para fazer isso?
Solução
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Isso é chamado de “transformação de identidade” no Especificação XSLT.
Outras dicas
Encontrei esse problema e a cópia é certamente a mais fácil de usar.A identidade funciona, mas são 5 linhas de código e você precisaria chamar esse modelo, não apenas defini-lo como está em seu documento XSLT (caso contrário, você provavelmente não obterá o que esperava em sua saída).
Na verdade, meu principal problema era copiar o conteúdo de uma tag, e não a tag em si.Na verdade, é muito fácil de resolver, mas demorei um pouco para descobrir (talvez porque QtXmlPatterns trave bastante!)
Portanto, o seguinte copia a tag nomeada aqui e todos os seus filhos:
<xsl:copy-of select="this/tag/here"/>
Mas na maioria das vezes você não quer fazer isso porque <here> é na verdade o contêiner, ou seja, ele não deve aparecer na saída.Nesse caso você pode simplesmente fazer isso:
<xsl:copy-of select="this/tag/here/*"/>
Isso copia todos os filhos encontrados na tag chamada <aqui>.
Supondo que seu xhtml esteja em um elemento YYY
http://www.dpawson.co.uk/xsl/sect2/N1930.html explica opções
xsl:cópia de