使用 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'