如何使 lxml 的解析器保留根元素之外的空格?

发布于 2024-07-24 03:28:54 字数 506 浏览 7 评论 0原文

我正在使用 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支持吗?

I am using lxml to manipulate some existing XML documents, and I want to introduce as little diff noise as possible. Unfortunately by default lxml.etree.XMLParser doesn't preserve whitespace before or after the root element of a document:

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

Is this possible using lxml? Is it supported by the underlying libxml2?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

∞梦里开花 2024-07-31 03:28:55

我不知道有哪个 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

I don't know of any XML library that will do it for you. But using a regex sounds like a decent idea if you really need to do this.

>>> 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
就像说晚安 2024-07-31 03:28:55

使用正则表达式捕获空格,并在完成后将其添加回字符串。

Capture the whitespace with a regex and add it back to the string when you're done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文