我正在向Salesforce合并API发出请求并获得如下响应:
xml_result = '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:partner.soap.sforce.com">
<soapenv:Header>
<LimitInfoHeader>
<limitInfo>
<current>62303</current>
<limit>2680000</limit><type>API REQUESTS</type></limitInfo>
</LimitInfoHeader>
</soapenv:Header>
<soapenv:Body>
<mergeResponse>
<result>
<errors>
<message>invalid record type</message>
<statusCode>INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY</statusCode>
</errors>
<id>003skdjf494244</id>
<success>false</success>
</result>
</mergeResponse>
</soapenv:Body>
</soapenv:Envelope>'
我希望能够解析此响应,如果success = false,则返回错误,statusCode和消息文本。
我尝试了以下内容:
import xml.etree.ElementTree as ET
tree = ET.fromstring(xml_result)
root.find('mergeResponse')
root.find('{urn:partner.soap.sforce.com}mergeResponse')
root.findtext('mergeResponse')
root.findall('{urn:partner.soap.sforce.com}mergeResponse')
...以及find
,findtext
和findall
的其他一些变体,但我似乎无法让这些变体返回任何结果。这是我被卡住的地方。我试图遵循ElementTree文档,但我不明白如何解析特定元素的树。
答案 0 :(得分:1)
Element.find()查找具有特定标记的第一个子项 https://docs.python.org/2/library/xml.etree.elementtree.html#finding-interesting-elements
由于mergeResponse
是后代,而不是孩子,因此在这种情况下应使用XPath语法:
root.find('.//{urn:partner.soap.sforce.com}mergeResponse')
将返回您的节点。 .//
搜索从当前节点开始的所有后代(在本例中为根)。