3

我正在尝试使用 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 级的应用程序集标记中获取名称和其他应用程序名称(可以在一个简单的列表中)

谢谢

4

1 回答 1

4

使用ElementTree API,您只需查找.//applicationXPath 即可找到<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
于 2013-04-01T14:58:39.623 回答