0

lxml で CDATA を扱うには適切な宣言でパーサーを作成する必要がありますが、XSLT はどうでしょうか。例えば:

from lxml import etree

parser = etree.XMLParser(strip_cdata=False)
tree = etree.parse('sample_with_cdata.xml', parser)
transform = etree.XSLT(etree.parse('dupe.xsl'))
xml_out = transform(tree)
xml_out.write('processed.xml')

lxml XSLT プロセッサを介して CDATA を含む xml ファイルを処理すると、すべての CDATA が削除されます。XSLT プロセッサに CDATA をそのまま残すように指示するにはどうすればよいですか?

PS。参考までに、同じパーサーを追加しetree.XSLTても結果は変わりません

4

2 に答える 2

1

XSLT に関する限り、XML の CDATA セクションは単なるノイズです。XSLT は<![CDATA["]]>を と同じよう&quot;に扱い"ます。これらは、ドキュメントの作成者が同じことを書くためのさまざまな方法です。

入力で CDATA セクションを使用して情報を伝達している場合、つまり とは<![CDATA[xxx]]>異なるものを意味する場合はxxx、XML 設計を変更する必要があります。

于 2013-06-24T13:30:06.977 に答える
1

これは lxml とは関係がないようです。私の知識不足です…

XSLT の CDATA は、出力宣言で「cdata-section-elements」属性で処理する必要があります。たとえば、XML ファイルの description 要素に CDATA が含まれている場合:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" cdata-section-elements='description' />
...
于 2013-06-24T11:29:10.697 に答える