概要: xslt を使用してデータを変換していますが、CDATA を含むタグと含まないタグを生成する必要があります。私の唯一のオプションは CDATA セクションをエスケープすることですか?
xml に既にあるデータをMoodle Xmlに変換してインポートしようとしています。最終製品には、 Moodle Xml docが CDATAに含める必要があると具体的に述べている Html を含める必要があります。
望ましい出力:
<question>
<name>
<text>FooName</text>
</name>
<questiontext format="html">
<text><![CDATA[<img src="1.png">]]></text>
</questiontext>
</question>
次のコードを使用してこれを試してみました (トリミングされていますが、入力 xml ファイルからのデータが含まれます)。
方法1、特別なことは何もありません
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<question>
<name>
<text>FooName</text>
</name>
<questiontext format="html">
<text><![CDATA[<img src="1.png">]]></text>
</questiontext>
</xsl:template>
</xsl:stylesheet>
そして得た...
方法 1 からの悪い出力
<question>
<name>
<text>FooName</text>
</name>
<questiontext format="html">
<text><img src="1.png"></text>
</questiontext>
</question>
だから私はxsltのドキュメントといくつかのSOの質問を調べました.2つのオプションがあると思われます:
- 何もしないでください。CDATA はエスケープされます。
cdata-section-elements ="text"タグ内の cdata セクションを自動生成するために使用します- を使用して、手動で CDATA セクションを生成します。
disable-output-escaping="yes"
OK、自動生成はいいですね。それを試してみましょう:
方法 2 追加cdata-section-elements="text"
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" cdata-section-elements="text"/>
からの不正な出力cdata-section-elements ="text":
<question>
<name>
<text><![CDATA[FooName]]></text>
</name>
<questiontext format="html">
<text><![CDATA[<img src="1.png">]]></text>
</questiontext>
</question>
したがって、2 はオプションではありません。これは、私が制御していないスキーマに、CDATA を含めたくない他の要素があるためです。
これにより、手でエスケープするオプション 3 が残ります。私の質問は次のとおりです。オプション 3 は私の唯一のオプションですか? XSLT を使用して目的の出力を得るために他にできることはありますか? XSLT を使用していませんか?