【发布时间】:2021-11-02 10:26:46
【问题描述】:
我们来看看下面的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<root
xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<URLBase>http://192.168.1.1:80</URLBase>
<device>
<serviceList>
<service>
<serviceType>1</serviceType>
</service>
</serviceList>
<deviceList>
<device>
<serviceList>
<service>
<serviceType>2</serviceType>
</service>
</serviceList>
<deviceList>
<device>
<serviceList>
<service>
<serviceType>3</serviceType>
</service>
</serviceList>
</device>
</deviceList>
</device>
</deviceList>
<presentationURL>/</presentationURL>
</device>
</root>
我想提取device 下的所有服务,所以在示例中它应该只有 1。
所以我写了:
import os
import sys
import xml.etree.ElementTree as ET
root = ET.fromstring(inner_xml) #inner_xml=above
device = root.find('{urn:schemas-upnp-org:device-1-0}device')
for serviceType in device.findall(
'.//{urn:schemas-upnp-org:device-1-0}serviceList//{urn:schemas-upnp-org:device-1-0}serviceType'):
print(serviceType.text)
但为什么我也会得到 2 和 3?他们不在serviceList 直接在device 下
【问题讨论】:
-
欢迎来到 Stack Overflow。当您遇到问题时,请始终发布完整的可复制粘贴代码(请参阅minimal reproducible example),包括
import语句。不要只发布代码片段。 -
@mzjn 完成了,请看一下
-
.//x等表达式选择上下文节点的所有x后代。在您的情况下,上下文节点是device元素。
标签: python python-3.x xml python-3.6 elementtree