我遇到的问题是,在创建子元素后更新XML文件时,文件不会使用层次结构格式更新,并且不会保留<?xml version="1.0"?>
这是我的代码:
import xml.etree.ElementTree as ET
import time
tree = ET.parse('TEST.xml')
root = tree.getroot()
x=root
newuser=ET.SubElement(x,("USER name='admin2' "))
tree.write("TEST.xml")
在我运行代码之前,这是我的XML文件:
<?xml version="1.0"?>
<root>
</root>
这是运行代码后的XML文件:
<root>
<USER name='admin2' /></root>
答案 0 :(得分:0)
XML中的漂亮打印是一种黑暗的艺术......你怎么知道给定的文本节点是文档的一部分还是只是用于装饰?在做出这些决定时,LXML往往是保守的。如果文档有文本节点,即使只有“\ n”的文本节点,它可能不会打印文档。但是你可以在加载后自己剥离节点:
>>> import lxml.etree as etree
>>> root = etree.fromstring("""<?xml version="1.0"?>\n<root>\n</root>""")
>>> root.text
'\n'
>>> for elem in root.iter("*"):
... if elem.text:
... elem.text = elem.text.strip() or None
...
>>>
现在您可以添加数据
>>> etree.SubElement(root, "USER", name="admin2")
<Element USER at 0x7fd60d37efc8>
然后,当您序列化文档时,您可以添加一个xml声明并选择相当打印输出。
>>> serialized=etree.tostring(root, xml_declaration=True, pretty_print=True)
>>> print(serialized.decode("ascii"))
<?xml version='1.0' encoding='ASCII'?>
<root>
<USER name="admin2"/>
</root>