XSLT を使用して XML ノードの子の正確なコピーを作成するにはどうすればよいですか?

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

  •  09-06-2019
  •  | 
  •  

質問

私の問題は、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 にあると仮定します。

http://www.dpawson.co.uk/xsl/sect2/N1930.html オプションの説明

xsl:コピー

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top