如何解析分层XML String

Rob*_*Rob 1 python xml

我有一个xml字符串,我需要在python中解析,如下所示:

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
     <s:Body>
         <PostLoadsResponse xmlns="http://webservices.truckstop.com/v11">
             <PostLoadsResult xmlns:a="http://schemas.datacontract.org/2004/07/WebServices.Objects" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                 <Errors xmlns="http://schemas.datacontract.org/2004/07/WebServices">
                    <Error>
                         <ErrorMessage>Invalid Location</ErrorMessage>
                    </Error>
                </Errors>
            </PostLoadsResult>
        </PostLoadsResponse>
    </s:Body>
</s:Envelope>'
Run Code Online (Sandbox Code Playgroud)

我无法使用xmltree来获取此树的错误消息,如下所示:

import xml.etree.ElementTree as ET
ET.fromstring(text).findall('{http://schemas.xmlsoap.org/soap/envelope/}Body')[0].getchildren()[0].getchildren()[0].getchildren()
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 5

您需要处理名称空间,您可以使用xml.etree.ElementTree:

tree = ET.fromstring(data)

namespaces = {
    's': 'http://schemas.xmlsoap.org/soap/envelope/', 
    'd': "http://schemas.datacontract.org/2004/07/WebServices"
}
print(tree.find(".//d:ErrorMessage", namespaces=namespaces).text)
Run Code Online (Sandbox Code Playgroud)

打印Invalid Location.