python - 无法提取 SessionId

标签 python xml soap elementtree

我正在尝试从我的 SOAP API 响应 (XML) 中提取 sessionId。但是,无论我尝试什么,Python 仍然给我 sessionId 是空的(当我将响应打印为文本时它不是)。

我已经尝试了建议 here ,但是在这种情况下它似乎不起作用。也许因为我只能得到根,但我不确定如何从 elementroot 到 elementtree。 请参阅下面的响应 XML 和我的代码:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <LoginResponse xmlns:ns10="http://caretrack.wirelesscar.net/reportrequest" xmlns:ns9="http://caretrack.wirelesscar.net/reportresponse" xmlns:ns8="http://caretrack.wirelesscar.net/matrisrequest"           xmlns:ns7="http://caretrack.wirelesscar.net/matrisresponse" xmlns:ns6="http://caretrack.wirelesscar.net/servicerequest" xmlns:ns5="http://caretrack.wirelesscar.net/serviceresponse"            xmlns:ns4="http://caretrack.wirelesscar.net/machinerequest" xmlns:ns3="http://caretrack.wirelesscar.net/machineresponse" xmlns:ns2="http://caretrack.wirelesscar.net/base"          xmlns="http://caretrack.wirelesscar.net/security">
            <ns2:session>
                <ns2:sessionId>xxxxxx</ns2:sessionId>
            </ns2:session>
        </LoginResponse>
    </soap:Body>
</soap:Envelope>




response = requests.post(url, data=body, headers=headers, auth=('xxxx@xxx.com', 'xxxxx'))

root = ET.fromstring(response.content)
sessionId = root.findall('.//{ns10:http://caretrack.wirelesscar.net/security}ns2:sessionId')

当我使用这段代码时,我没有收到任何错误消息,只有“[]”。也尝试了其他方法,但在那种情况下我得到“无”。

谁能告诉我我做错了什么?

最佳答案

sessionId 元素绑定(bind)到 http://caretrack.wirelesscar.net/base 命名空间。这有效(注意没有使用前缀):

sessionId = root.findall('.//{http://caretrack.wirelesscar.net/base}sessionId')

由于只有一个 sessionId,您可以使用 find()(返回单个元素)而不是 findall()(它返回一个列表)。


另一种选择是创建一个带前缀的字典并在搜索方法中使用它们。参见 https://docs.python.org/3/library/xml.etree.elementtree.html#parsing-xml-with-namespaces .

关于python - 无法提取 SessionId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57291274/

相关文章:

python - tensorflow 中不同范围的子网权重共享

javascript - 代码在windows下可以运行,但在linux下不行

C# - 按日期列对数据表进行排序并仅将前 10 条记录绑定(bind)到网格

ios - 如何为 iOS 客户端生成 Nonce token ?

python - 如何修复此代码,使其打印一串字母,其中一个位置被相应的输入数字替换?

python - 基于Python中的公共(public)匹配属性将对象列表合并为一致列表

php - 更新 ATOM 条目的正确/可接受的方式

java - 如何在客户端使用 cxf 记录 soap 请求响应时间?

python - igraph 中的可选箭头

mysql - 使用 SQL Server 创建 XML 文档