如何使用Python

时间:2017-09-14 19:54:29

标签: python xml parsing

我正在尝试从xml文件中的元素读取每个子标记和属性。下面列出了xml的一个示例。

   <drCoreType Name="default">
      <ModelType Name="default">
         <ALTrVoltage Enable="No" Group="Other" Delay="0"/>
         <ALTrCurrent Enable="Yes" Group="Minor" Delay="0"/>
         <ALTrTeAmbient Enable="Yes" Group="Minor" Delay="5"/>
         <ALTrTeTankTop Enable="No" Group="Minor" Delay="5"/>
         <ALTrTeTankBottom Enable="No" Group="Minor" Delay="5"/>
         <ALTrTeCTO Enable="No" Group="Other" Delay="5"/>
         <ALTrTeCBO Enable="No" Group="Other" Delay="5"/>

继续使用100个不同的标签再增加100行。我试图在每个ModelType子,标签和属性中读入一个对象数组,而不使用.find(“name”)搜索每个名称。关于如何做到这一点的任何想法?我很难过,谷歌也没有太大的帮助。

1 个答案:

答案 0 :(得分:1)

可能没有,但我喜欢xpath,所以你可以这样做:

import sys
import pprint
from lxml import etree

with open(sys.argv[1]) as xml_file:
    tree = etree.parse(xml_file)

pprint.pprint([(element.tag, element.attrib) for element in
       tree.xpath('//drCoreType/ModelType/*')])

这给:

[('ALTrVoltage', {'Enable': 'No', 'Group': 'Other', 'Delay': '0'}),
 ('ALTrCurrent', {'Enable': 'Yes', 'Group': 'Minor', 'Delay': '0'}),
 ('ALTrTeAmbient', {'Enable': 'Yes', 'Group': 'Minor', 'Delay': '5'}),
 ('ALTrTeTankTop', {'Enable': 'No', 'Group': 'Minor', 'Delay': '5'}),
 ('ALTrTeTankBottom', {'Enable': 'No', 'Group': 'Minor', 'Delay': '5'}),
 ('ALTrTeCTO', {'Enable': 'No', 'Group': 'Other', 'Delay': '5'}),
 ('ALTrTeCBO', {'Enable': 'No', 'Group': 'Other', 'Delay': '5'})]