Come posso creare una copia esatta dei figli di un nodo xml con XSLT?
Domanda
Il mio problema è che il mio documento XML contiene frammenti di XHTML al suo interno e mentre lo passa attraverso un XSLT vorrei che eseguisse il rendering di tali frammenti senza alterarli.
Ho provato a racchiudere lo snippet in un CDATA ma non funziona poiché minore di e maggiore di vengono tradotti in < e > anziché essere ripetuti direttamente.
Qual è l'XSL richiesto per fare ciò?
Soluzione
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Questa viene definita "trasformazione dell'identità" nel Specifica XSLT.
Altri suggerimenti
Ho riscontrato questo problema e la copia è sicuramente la più semplice da usare.L'identità funziona, ma sono 5 righe di codice e dovresti chiamare un modello di questo tipo, non solo definirlo così com'è nel tuo documento XSLT (altrimenti probabilmente non otterrai ciò che ti aspettavi nel tuo output).
Il mio problema principale in realtà era copiare il contenuto di un tag e non il tag stesso.In realtà è molto semplice da risolvere, ma mi ci è voluto un po' di tempo per capirlo (forse perché QtXmlPatterns si blocca parecchio!)
Quindi, quanto segue copia il tag qui nominato e tutti i suoi figli:
<xsl:copy-of select="this/tag/here"/>
Ma molto spesso non vuoi farlo perché <here> è in realtà il contenitore, in altre parole, non dovrebbe apparire nell'output.In tal caso puoi semplicemente fare questo:
<xsl:copy-of select="this/tag/here/*"/>
Questo copia tutti i figli trovati nel tag denominato <here>.
Supponendo che il tuo xhtml sia in un elemento YYY
http://www.dpawson.co.uk/xsl/sect2/N1930.html spiega le opzioni
xsl:copia di