簡體   English   中英

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM