当我将元素添加到空元素时,lxml 打印失败

Pretty printing is failing with lxml when I add an element to an empty element

提问人:Autechre 提问时间:10/20/2023 最后编辑:Jean-François FabreAutechre 更新时间:10/20/2023 访问量:38

问:

当我将元素添加到空XML元素时,lxml模块的漂亮打印失败:

这是我的python代码:

import lxml.etree

xml_parser = lxml.etree.XMLParser(remove_blank_text=True)
xml_tree = lxml.etree.parse("myFile.xml", xml_parser)
root = xml_tree.getroot()

for elem in root:
    if elem.tag == "apple":
        lxml.etree.SubElement(elem, "McIntosh")

tree = lxml.etree.ElementTree(root)
tree.write("output.xml", pretty_print=True, xml_declaration=True, encoding="utf-8")

这是我的XML输入文件:

<fruits>
  <apple>
  </apple>
</fruits>

这是我的输出XML文件:

<?xml version='1.0' encoding='UTF-8'?>
<fruits>
  <apple>
  <McIntosh/></apple>
</fruits>

如果我的XML元素不为空,我的代码就可以工作:

<?xml version='1.0' encoding='UTF-8'?>
<fruits>
  <apple>
    <golden/>
    <McIntosh/>
  </apple>
</fruits>

如果我找不到解决方案,我将不得不实现自定义 xml 格式化程序。

有谁知道如何解决这个问题?

python lxml 漂亮打印

评论


答:

1赞 I like Bananas 10/20/2023 #1

使用该函数来修复它。作为额外的奖励,这使您可以自定义缩进indent

import lxml.etree

xml_parser = lxml.etree.XMLParser(remove_blank_text=True)
xml_tree = lxml.etree.parse("myFile.xml", xml_parser)
root = xml_tree.getroot()

for elem in root:
    if elem.tag == "apple":
        lxml.etree.SubElement(elem, "McIntosh")

lxml.etree.indent(xml_tree, '    ')

tree = lxml.etree.ElementTree(root)
tree.write("output.xml", pretty_print=True, xml_declaration=True, encoding="utf-8")

输出如下:

<?xml version='1.0' encoding='UTF-8'?>
<fruits>
    <apple>
        <McIntosh/>
    </apple>
</fruits>

评论

0赞 Autechre 10/20/2023
谢谢m8,它有效!