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 回答