python - Python:XML元素树findall()不返回任何东西
问题描述
查看此处的文档:https://docs.python.org/3.8/library/xml.etree.elementtree.html,我制定了以下脚本来解析 XML 字符串以获得特定的元素节点:
response = """
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<UserLoginResponse xmlns="urn:WsAPIUserIntf-IWsAPIUser">
<return xmlns="http://omniticket.network/ovw7">
<ERROR>
<CODE>200</CODE>
<TYPE>Managed</TYPE>
<TEXT>Success</TEXT>
</ERROR>
<SESSIONID>TestSession</SESSIONID>
<USERCODE>API001</USERCODE>
<APPSERVERVERSION>7.4.9.11</APPSERVERVERSION>
<LANGUAGEID>-1</LANGUAGEID>
<PASSWORDEXPIRATION>2020-12-31</PASSWORDEXPIRATION>
<USERAK>FHFHFHFHFHF</USERAK>
</return>
</UserLoginResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
"""
namespaces = {
'UserLoginResponse': 'urn:WsAPIUserIntf-IWsAPIUser',
}
for UserLoginResponse in xml.etree.ElementTree.fromstring(response).findall('UserLoginResponse:return', namespaces):
print(UserLoginResponse)
xml.etree.ElementTree.fromstring(response).findall
然而,解压后的数组中没有任何内容。
我究竟做错了什么?
解决方案
<return>
元素的命名空间是http://omniticket.network/ovw7
.
namespaces = {
'UserLoginResponse': 'urn:WsAPIUserIntf-IWsAPIUser',
'ovw7': 'http://omniticket.network/ovw7',
}
tree.findall('.//ovw7:return', namespaces)
# -> [<Element '{http://omniticket.network/ovw7}return' at 0x02FB82A0>]
.//
XPath 开头的 在这里是必需的。
所有包含的元素也在该命名空间中。您还必须为其中任何一个使用前缀:
tree.find('.//ovw7:return/ovw7:SESSIONID', namespaces)
# -> <Element '{http://omniticket.network/ovw7}SESSIONID' at 0x02FB8510>
推荐阅读
- python - 如果键匹配,如何加入字典的值
- android - 新一代 Google App Bundle 中是否还需要 mdpi 或 xdpi 资源文件?
- r - 在现有图上添加线条的框架:ggplot 中的“点”和“图”
- r - 表格中的分组条形图
- javascript - 从只有部分文件名的 url 打开一个 pdf 文档
- c# - 实例化时,游戏对象显示为克隆。有什么方法可以识别每个克隆吗?
- sql-server-2012 - 如何对两列求和并与同一张表的另一列进行比较
- apache-camel - 使用骆驼将xml转换为excel
- c# - XDocument.Save() 东西块文件
- c - C语言中for和while循环的区别?