2

lxml を使用して既存の XML ドキュメントを操作していますが、差分ノイズをできるだけ少なくしたいと考えています。残念ながら、デフォルトではlxml.etree.XMLParserはドキュメントのルート要素の前後の空白を保持しません:

>>> xml = '\n    <etaoin>shrdlu</etaoin>\n'
>>> lxml.etree.tostring(lxml.etree.fromstring(xml))
'<etaoin>shrdlu</etaoin>'
>>> lxml.etree.tostring(lxml.etree.fromstring(xml)) == xml
False

これは lxml を使用して可能ですか? 基礎となる libxml2 でサポートされていますか?

4

2 に答える 2

1

あなたのためにそれを行うXMLライブラリを知りません。しかし、本当にこれを行う必要がある場合、正規表現を使用することは適切なアイデアのように思えます。

>>> xml = '\n    <etaoin>shrdlu</etaoin>\n'
>>> head, tail = re.findall(r"^\s*|\s*$", xml)[:2]
>>> root = etree.fromstring(xml)
>>> out = head + etree.tostring(root) + tail
>>> out == xml
True
于 2009-06-10T20:25:51.190 に答える
0

正規表現で空白をキャプチャし、完了したら文字列に追加します。

于 2009-06-10T00:21:15.740 に答える