Python XML在不同级别上解析

时间:2013-04-01 14:34:31

标签: python xml

我正在尝试使用Python在不同级别上解析具有相同名称标记的XML。我通过文档和其他StackOverflow答案进行了大量搜索,但我找不到合适的解决方案。

XML看起来像这样:

<configuration>
   <applications>
      <application>
         <name>name1</name>
         <protocol>protocol1</protocol>
         <port>port1</port>
      </application>
      <application>
          .
      </application>
   <application-set>
      <name>appset_name1</name>
      <application>
         <name>appname1</name>
      </application>
   </application-set>
   <application-set>
      .
   </application-set>
   </applications>
</configuration>

我需要从第3级的应用程序标签中获取名称,协议和端口,并从第3级的应用程序集标签中获取名称和其他应用程序名称(可以在一个简单的列表中)

THX

1 个答案:

答案 0 :(得分:4)

使用ElementTree API,您只需查找.//application XPath即可找到任何级别的<application>元素:

for application in tree.findall('.//application'):
    name = application.find('name').text
    protocol = application.find('protocol')
    if protocol is not None:
        protocol = protocol.text
    port = application.find('port')
    if port is not None:
        port = port.text

XPath表达式也可以通过指定适用的父级来找到更具体级别的标记:

'.//applications/application'     # any <application> tag below <applications>
'.//application-set/application'  # any <application> tag below <applications>
'./*/*/application'                 # <application> tags with two elements in between