解析XML以获取节点的子级名称

时间:2018-09-25 17:12:14

标签: python xml python-3.x python-2.7 xml-parsing

是Python / XML的新手。我想解析XML以获取父节点下的数据。 我的XML具有一组名称不同的“实体”节点。在每个“实体”下,都有一组“属性”,如下所示。我需要获取特定实体的所有属性。例如,如果它是实体“ Quit”,我需要获取相应的“属性”名称,并用逗号分隔字符串。例如使用Python脚本的 {QuitId,QuitReason,状态,QuitTime} 。我只需要属性的“名称”属性。

<Entity Name="Boot">
  <Property Name="BootId" Type="Edm.Int32" Nullable="false"/>
  <Property Name="Name" Type="Edm.String" Nullable="false"/>
  <Property Name="Status" Type="Edm.String" Nullable="false"/>
  <Property Name="BootTime" Type="Edm.DateTimeOffset"/>
</Entity>
<Entity Name="Quit">
  <Property Name="QuitId" Type="Edm.Int32" Nullable="false"/>
  <Property Name="QuitReason" Type="Edm.String" Nullable="false"/>
  <Property Name="Status" Type="Edm.String" Nullable="false"/>
  <Property Name="QuitTime" Type="Edm.DateTimeOffset"/>
</Entity>

我可以使用以下脚本获取所有实体的属性“名称”。但是,我不确定如何只获取特定实体的属性;就像“退出”

import xml.etree.ElementTree as ET
tree = ET.parse('D:\Code\XM_metadata.xml')
root = tree.getroot()
for prop in root.iter('{http://docs.oasis-open.org/odata/ns/edm}Property'):
    print(prop.get('Name'))

1 个答案:

答案 0 :(得分:1)

我可以得到所需的名称。感谢您的指导。

import xml.etree.ElementTree as ET
tree = ET.parse('D:\Code\XM_metadata.xml')
root = tree.getroot()
properties = ''
for prop in root.findall(".//*[@Name='Quit']/{http://docs.oasis-open.org/odata/ns/edm}Property"):
    properties = properties + prop.get('Name') + ','
properties = properties[:-1]
print (properties)