我处理这个 SOAP 响应:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<StartProcessFileResponse xmlns="http://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml">
<StartProcessFileResult>{B4815D0C-91F9-4BD3-BF2F-3A70E935AA7B}</StartProcessFileResult>
</StartProcessFileResponse>
</soap:Body>
</soap:Envelope>
我需要获取 StartProcessFileResult
的 XPath元素,但是当我在在线 XPath 验证器中尝试这个 XPath 时,我没有找到匹配项:
/soap:Envelope/soap:Body/StartProcessFileResponse/StartProcessFileResult
我尝试了一小段 XPath 和这个 XPath /soap:Envelope/soap:Body
返回 <body>
元素,但是当我进一步尝试访问 StartProcessFileResponse
时使用此 XPath /soap:Envelope/soap:Body/StartProcessFileResponse
, 我找不到匹配项。
我做错了什么?
最佳答案
StartProcessFileResult
位于 http://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml
默认命名空间中。
使用 XPath 库的命名空间绑定(bind)功能,绑定(bind)一个命名空间前缀,比如 rs
到 http://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml
.
然后下面的 XPath 将按要求选择 StartProcessFileResult
:
/soap:Envelope/soap:Body/rs:StartProcessFileResponse/rs:StartProcessFileResult
如果不能绑定(bind)命名空间前缀,可以使用local-name()
函数代替,
/soap:Envelope/soap:Body/*[local-name()='StartProcessFileResponse']/*[local-name()='StartProcessFileResult']
但首选的方法是创建和使用命名空间前缀绑定(bind)。
关于xml - 不同的默认命名空间中元素的 XPath 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167803/