什么是不同的默认命名空间中的元素的XPath?

时间:2015-07-01 17:19:35

标签: xml xpath

我处理这个SOAP响应:

tintAdjustmentMode

我需要将XPath添加到<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> 元素,但是当我在在线XPath验证器中尝试此XPath时,我得不到匹配:

StartProcessFileResult

我尝试了一小块XPath,而这个XPath /soap:Envelope/soap:Body/StartProcessFileResponse/StartProcessFileResult 会返回/soap:Envelope/soap:Body元素,但当我进一步尝试使用此XPath <body>访问StartProcessFileResponse时,我得不到匹配。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

StartProcessFileResult位于http://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml默认命名空间中。

使用XPath库的命名空间绑定工具,绑定命名空间前缀,例如rshttp://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml

然后,以下XPath将根据请求选择StartProcessFileResult

/soap:Envelope/soap:Body/rs:StartProcessFileResponse/rs:StartProcessFileResult

如果无法绑定名称空间前缀,则可以改为使用local-name()函数,

/soap:Envelope/soap:Body/*[local-name()='StartProcessFileResponse']/*[local-name()='StartProcessFileResult']

但首选方法是制作和使用名称空间前缀绑定。