使用 LXML 从 Python 中的 SOAP 响应中解析字段
Parsing a field from SOAP response in Python using LXML
我想从 SOAP 响应中解析 customer_id。
这是 XML:
<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:s1="myservice.mymodels.models" xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="me.web.3.5.4.0">
<soap11env:Body>
<tns:orderResponse>
<tns:orderResult>
<s1:customer_id>12345</s1:customer_id>
</tns:orderResult>
</tns:orderResponse>
</soap11env:Body>
</soap11env:Envelope>
这是一块带有 BeautifulSoap 的蛋糕....但我仅限于 LXML。
我用 LXML 尝试过的都没有用。
在我最近的尝试中,我尝试获取根元素,然后从那里开始:
tree = etree.fromstring(response.content)
root = tree.getroot()
但我收到以下错误:
'lxml.etree._Element' object has no attribute 'getroot'
我怎样才能从这个 XML 中得到 customer_id?
lxml也很简单;你只需要看你的命名空间......
第一:
doc = etree.XML(response.text.encode())
然后,使用命名空间:
ns = {"xx":"myservice.mymodels.models"}
target = doc.xpath('//xx:customer_id',namespaces=ns)[0]
target.text
或者,如果您不想打扰命名空间
target = doc.xpath('//*[local-name()="customer_id"]')[0]
target.text
在这两种情况下,输出都是:
'12345'
我想从 SOAP 响应中解析 customer_id。 这是 XML:
<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:s1="myservice.mymodels.models" xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="me.web.3.5.4.0">
<soap11env:Body>
<tns:orderResponse>
<tns:orderResult>
<s1:customer_id>12345</s1:customer_id>
</tns:orderResult>
</tns:orderResponse>
</soap11env:Body>
</soap11env:Envelope>
这是一块带有 BeautifulSoap 的蛋糕....但我仅限于 LXML。 我用 LXML 尝试过的都没有用。
在我最近的尝试中,我尝试获取根元素,然后从那里开始:
tree = etree.fromstring(response.content)
root = tree.getroot()
但我收到以下错误:
'lxml.etree._Element' object has no attribute 'getroot'
我怎样才能从这个 XML 中得到 customer_id?
lxml也很简单;你只需要看你的命名空间...... 第一:
doc = etree.XML(response.text.encode())
然后,使用命名空间:
ns = {"xx":"myservice.mymodels.models"}
target = doc.xpath('//xx:customer_id',namespaces=ns)[0]
target.text
或者,如果您不想打扰命名空间
target = doc.xpath('//*[local-name()="customer_id"]')[0]
target.text
在这两种情况下,输出都是:
'12345'