当我将一个元素添加到空的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格式化程序.

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

推荐答案

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

Python相关问答推荐

从Python调用GMP C函数时的分段错误和内存泄漏

Python中的Pool.starmap异常处理

Twilio:CallInstance对象没有来自_的属性'

将numpy矩阵映射到字符串矩阵

基本链合同的地址是如何计算的?

从包含数字和单词的文件中读取和获取数据集

Python 3.12中的通用[T]类方法隐式类型检索

大Pandas 胚胎中产生组合

为什么tkinter框架没有被隐藏?

利用Selenium和Beautiful Soup实现Web抓取JavaScript表

移动条情节旁边的半小提琴情节在海运

在嵌套span下的span中擦除信息

使用Python和文件进行模糊输出

如何更改groupby作用域以找到满足掩码条件的第一个值?

在Admin中显示从ManyToMany通过模型的筛选结果

Python避免mypy在相互引用中从另一个类重定义类时失败

Gekko中基于时间的间隔约束

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

一个telegram 机器人应该发送一个测验如何做?""