gpt4 book ai didi

python - 防止 lxml 创建自闭合标签

转载 作者:太空狗 更新时间:2023-10-30 02:40:40 27 4
gpt4 key购买 nike

我有一个(旧的)工具不理解像 <STATUS/> 这样的自闭标签。 .所以,我们需要用这样的打开/关闭标签序列化我们的 XML 文件:<STATUS></STATUS> .

目前我有:

>>> from lxml import etree

>>> para = """<ERROR>The status is <STATUS></STATUS>.</ERROR>"""
>>> tree = etree.XML(para)
>>> etree.tostring(tree)
'<ERROR>The status is <STATUS/>.</ERROR>'

如何使用打开/关闭标签进行序列化?

<ERROR>The status is <STATUS></STATUS>.</ERROR>

解决方案

wildwilhelm 提供, below :

>>> from lxml import etree

>>> para = """<ERROR>The status is <STATUS></STATUS>.</ERROR>"""
>>> tree = etree.XML(para)
>>> for status_elem in tree.xpath("//STATUS[string() = '']"):
... status_elem.text = ""
>>> etree.tostring(tree)
'<ERROR>The status is <STATUS></STATUS>.</ERROR>'

最佳答案

好像<STATUS>标签被分配了一个 text None 的属性:

>>> tree[0]
<Element STATUS at 0x11708d4d0>
>>> tree[0].text
>>> tree[0].text is None
True

如果您设置 text <STATUS> 的属性标记为一个空字符串,你应该得到你要找的东西:

>>> tree[0].text = ''
>>> etree.tostring(tree)
'<ERROR>The status is <STATUS></STATUS>.</ERROR>'

有了这个想法,您可能可以遍历 DOM 树并修复 text在写出您的 XML 之前。像这样:

# prevent creation of self-closing tags
for node in tree.iter():
if node.text is None:
node.text = ''

关于python - 防止 lxml 创建自闭合标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41890415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com