不同层次上的pythonxml解析

不同层次上的pythonxml解析,python,xml,Python,Xml,我正在尝试使用Python解析不同级别上具有相同名称标记的XML。我在文档和其他StackOverflow答案中搜索了很多,但找不到合适的解决方案 XML如下所示: <configuration> <applications> <application> <name>name1</name> <protocol>protocol1</protocol>

我正在尝试使用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>

名称1
协议1
端口1
.
应用程序集名称1
appname1
.
我需要从第三层的应用程序标记中获取名称、协议和端口,从第三层的应用程序集标记中获取名称和其他应用程序名称(可以在简单列表中)

Thx

使用,您只需查找
//application
XPath即可在任何级别找到
元素:

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
。//applications/application'#下面的任何标记
“.//应用程序集/应用程序”#下面的任何标记
“./*/*/application”#标记之间有两个元素

Thx快速回答,但我只需要特定级别的应用程序标签。我想我可以用其他不那么优雅的方式。例如,仅适用于级别3上的应用程序的应用程序名称、协议和端口。