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