如何解决Python,将嵌套元素添加到xml文件
我有一个像这样的 xml 文件:
<annotation>
<folder>my-project-name</folder>
<filename>red_noisy_snake_0000.png</filename>
<object>
<name>red_noisy_snake</name>
<pose>Unspecified</pose>
<truncated>Unspecified</truncated>
<difficult>Unspecified</difficult>
<bndbox>
<xmin>618</xmin>
<ymin>774</ymin>
<xmax>1037</xmax>
<ymax>858</ymax>
</bndbox>
</object>
</annotation>
而且我需要添加另一个“对象”字段,类似于已经存在的字段。 我将各种值保存在变量中(所以,'name'、'pose'、'truncated'、'bndbox' 中的值......),我只需要将它添加到原始 xml 文件中,以便在最后我应该得到类似的结果:
<annotation>
<folder>red_noisy_snake</folder> --> CHANGED VALUE
<filename>red_noisy_snake_0000.png</filename>
<object>
<name>red_noisy_snake</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>618</xmin>
<ymin>774</ymin>
<xmax>1037</xmax>
<ymax>858</ymax>
</bndbox>
</object>
<object> --> ADDED OBJECT FIELD
<name>child_seat</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>871</xmin>
<ymin>25</ymin>
<xmax>1190</xmax>
<ymax>566</ymax>
</bndbox>
</object>
</annotation>
我知道如何添加单个非嵌套元素,例如:
import xml.etree.ElementTree as ET
in_file = 'wrong.xml'
tree = ET.parse(in_file)
root = tree.getroot()
## add single field
add = ET.Element("tag_name")
add.tail = '\n\t'
add.text = 'content'
root.insert(5,add)
ET.dump(root)
但我不知道如何正确创建我需要的嵌套结构。
解决方法
公平警告:并非所有人都喜欢这种方法 - 并且更喜欢手动构建元素 - 但是当涉及到冗长的嵌套节点结构时,我更喜欢使用这种类似模板的方法。
#this assumes all your new variables are located in one list; if not - you'll have to modify
inserts = ["child_seat","Unspecified",871,25,1190,566]
new_el = f"\n<object>\n \
<name>{inserts[0]}</name>\n <pose>{inserts[1]}</pose>\n <truncated>{inserts[2]}</truncated>\n \
<difficult>{inserts[3]}</difficult>\n <bndbox>\n <xmin>{inserts[4]}</xmin>\n \
<ymin>{inserts[5]}</ymin>\n <xmax>{inserts[6]}</xmax>\n \
<ymax>{inserts[7]}</ymax>\n </bndbox>\n </object>\n"
add = ET.fromstring(new_el)
root.insert(3,add)
print(ET.tostring(root).decode())
输出应该是您要查找的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。