XSLT を使用して XML ノードの子の正確なコピーを作成するにはどうすればよいですか?
質問
私の問題は、XML ドキュメント内に XHTML のスニペットが含まれており、それを XSLT に渡すときに、それらのスニペットを破損せずにレンダリングしたいことです。
スニペットを CDATA でラップしようとしましたが、「より小さい」と「より大きい」は直接エコーされるのではなく、< と > に変換されるため、機能しません。
これを行うために必要な XSL は何ですか?
解決
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
これは、本書では「恒等変換」と呼ばれます。 XSLT仕様.
他のヒント
私はその問題に遭遇しましたが、確かにコピーが最も使いやすいです。ID は機能しますが、これは 5 行のコードであり、XSLT ドキュメント内でそのまま定義するだけでなく、そのようなテンプレートを呼び出す必要があります (そうしないと、おそらく出力で期待したものが得られないでしょう)。
実際の私の主な問題は、タグ自体ではなく、タグのコンテンツをコピーすることでした。実際には解決するのは非常に簡単ですが、それを理解するまでに少し時間がかかりました (おそらく QtXmlPatterns がかなりクラッシュするためです!)
したがって、次のコードは、ここで指定されたタグとそのすべての子をコピーします。
<xsl:copy-of select="this/tag/here"/>
しかし、ほとんどの場合、<here> は実際にはコンテナであるため、これは望ましくありません。つまり、出力に表示されるべきではないからです。その場合は、次のようにするだけで済みます。
<xsl:copy-of select="this/tag/here/*"/>
これにより、<here> という名前のタグ内にあるすべての子がコピーされます。
xhtml が要素 YYY にあると仮定します。
xsl:コピー
所属していません StackOverflow