我正在使用lxml来操作一些现有的XML文档,我想尽可能少地引入diff噪声。不幸的是,默认情况下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支持?
答案 0 :(得分: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
答案 1 :(得分:0)
使用正则表达式捕获空白,并在完成后将其添加回字符串。