[英]Want to delete multiple tags with same tag name in XML using python elementtree?
[英]Get children elements of multiple instances of the same name tag using ElementTree
我有一個看起來像這樣的 xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<boundary_conditions>
<rot>
<rot_instance>
<name>BC_1</name>
<rpm>200</rpm>
<parts>
<name>rim_FL</name>
<name>tire_FL</name>
<name>disk_FL</name>
<name>center_FL</name>
</parts>
</rot_instance>
<rot_instance>
<name>BC_2</name>
<rpm>100</rpm>
<parts>
<name>tire_FR</name>
<name>disk_FR</name>
</parts>
</rot_instance>
</data>
我實際上知道如何提取與每個實例對應的數據。 所以我可以對名稱tag
執行以下操作:
import xml.etree.ElementTree as ET
tree = ET.parse('file.xml')
root = tree.getroot()
names= tree.findall('.//boundary_conditions/rot/rot_instance/name')
for val in names:
print(val.text)
這給了我:
BC_1
BC_2
但是如果我對零件標簽做同樣的事情:
names= tree.findall('.//boundary_conditions/rot/rot_instance/parts/name')
for val in names:
print(val.text)
它會給我:
rim_FL
tire_FL
disk_FL
center_FL
tire_FR
disk_FR
它將與部件/名稱對應的所有數據組合在一起。 我想要的輸出為我提供每個實例的“部件”子元素作為單獨的列表。 所以這就是我想要得到的:
instance_BC_1 = ['rim_FL', 'tire_FL', 'disk_FL', 'center_FL']
instance_BC_2 = ['tire_FR', 'disk_FR']
任何幫助表示贊賞,謝謝。
您必須首先找到所有parts
元素,然后從每個parts
元素中找到所有name
標簽。
看一看:
parts = tree.findall('.//boundary_conditions/rot/rot_instance/parts')
for part in parts:
for val in part.findall("name"):
print(val.text)
print()
instance_BC_1 = [val.text for val in parts[0].findall("name")]
instance_BC_2 = [val.text for val in parts[1].findall("name")]
print(instance_BC_1)
print(instance_BC_2)
輸出:
rim_FL
tire_FL
disk_FL
center_FL
tire_FR
disk_FR
['rim_FL', 'tire_FL', 'disk_FL', 'center_FL']
['tire_FR', 'disk_FR']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.