gpt4 book ai didi

python - 通过 ElementTree 附加和格式化新的子元素

转载 作者:行者123 更新时间:2023-12-01 02:28:56 26 4
gpt4 key购买 nike

使用以下代码,我可以在我想要的位置成功添加子元素,并且在功能上它可以工作。为了可读性,我想格式化方式item.append插入新的子元素。我的代码:

import xml.etree.ElementTree as ET

tree = ET.parse(file.xml)
root = tree.getroot()

for items in root.iter('items'):
item = ET.SubElement(items, 'item')
item.append((ET.fromstring('<item>cat</item>')))

tree.write('output.xml')

XML 文件:

<interface>
<object>
<items>
<item>dog</Item>
</items>
</object>
</interface>

预期输出:

<interface>
<object>
<items>
<item>dog</item>
<item>cat</item>
</items>
</object>
</interface>

实际输出:

<interface>
<object>
<items>
<item>dog</item>
<item><item>cat</item></item></items>
</object>
</interface>

通常我不会关心它如何格式化output.xml 文件。但是,我将添加 <item> while 中的子元素循环,所以当我有 4 或 5 个添加时,为了可读性,代码会变得有点草率。

我已经看过很多与此相关的类似问题,但它们要么没有答案,要么不适用于我想要做的事情。

这是我在 while 循环中的代码,以防万一它会添加更多说明:

import xml.etree.ElementTree as ET

tree = ET.parse(file.xml)
root = tree.getroot()

while True:

item_add = input("Enter item to add: 'n")
item_string = '<item>'
item_string += item_add
item_string += '</item>'

for items in root.iter('items'):
item = ET.SubElement(items, 'item')
item.append((ET.fromstring(item_string)))

tree.write('output.xml')

#Code asking for more input, if none break out of loop

感谢您提前提供的任何帮助。

最佳答案

考虑使用 .find() 向下走到所需的节点,然后只需使用 SubElement 进行添加。使用 etree 等 DOM 库时,不需要字符串版本的标记:

import xml.etree.ElementTree as ET

tree = ET.parse("input.xml")
root = tree.getroot()

while True:
item_add = input("Enter item to add: ")

if item_add == 'x':
break

items = root.find('object').find('items')
tmp = ET.SubElement(items, 'item')
tmp.text = item_add

# PRINT TO SCREEN
print(ET.tostring(root).decode('utf-8'))

# SAVE TO FILE
tree.write('output.xml')

输出 (在输入中输入cat、frog、zebra后,使用x结束循环)

<interface>
<object>
<items>
<item>dog</item>
<item>cat</item><item>frog</item><item>zebra</item></items>
</object>
</interface>

使用内置 mini.dom 或第三方 lxml pretty printing .

关于python - 通过 ElementTree 附加和格式化新的子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47058742/

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