Я следил за примерами из ВОТ и ВОТ пытаюсь разобрать ответ SOAP, но не могу получить нужный мне элемент.
Пример ответа SOAP:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="urn:partner.soap.sforce.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<loginResponse>
<result>
<metadataServerUrl>meta</metadataServerUrl>
<passwordExpired>false</passwordExpired>
<sandbox>true</sandbox>
<serverUrl>someUrl</serverUrl>
<sessionId>sessionId###</sessionId>
<userId>userId###</userId>
<userInfo></userId>
</result>
</loginResponse>
</soapenv:Body>
</soapenv:Envelope>
Пытаясь получить sessionId
но получение None
или пустой список назад.
Пример кода:
import xml.etree.ElementTree as ET
...
r = requests.post(url, headers=header, data=payload)
data = r.content
ns = {
"soapenv": "http://schemas.xmlsoap.org/soap/envelope/"
}
root = ET.fromstring(data)
sid = root.findall(".//soapenv:sessionId", ns)
# Tried these and any combination of those
#sid = root.findall("./soapenv:Body/soapenv:loginResponse/soapenv:result/soapenv:sessionId", ns)
#sid = root.findall("./soapenv:Body/loginResponse/result/sessionId", ns)
#sid = root.findall("soapenv:sessionId", ns)
print(sid)
Может кто-нибудь помочь с этим?
Вы пытались найти неправильный нс.
Вот рабочий пример:
import xml.etree.ElementTree as ET
data = """<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="urn:partner.soap.sforce.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<loginResponse>
<result>
<metadataServerUrl>meta</metadataServerUrl>
<passwordExpired>false</passwordExpired>
<sandbox>true</sandbox>
<serverUrl>someUrl</serverUrl>
<sessionId>sessionId###</sessionId>
<userId>userId###</userId>
<userInfo></userInfo>
</result>
</loginResponse>
</soapenv:Body>
</soapenv:Envelope>"""
root = ET.fromstring(data)
sid = root.findall(".//{urn:partner.soap.sforce.com}sessionId")
print(sid[0].text)