如何编写XPath查询获取SOAP响应XML中<wsOut>元素的值?
解决SOAP响应XML中提取wsOut内容的XPath问题
你的XPath查询失败主要有三个原因:
- SOAP命名空间前缀拼写错误:原XML里的前缀是
SOAP-ENV:,你写成了SOAP-ENV-或者SOAP:ENV:,符号使用错误 - 未处理默认命名空间:
runResponse和wsOut元素属于urn:TestAPI:testingtestingAPI这个默认命名空间,XPath中必须指定才能匹配 - XPath索引从1开始:你用的
runResponse[0]是无效的,XML节点索引起始值为1
下面是几种可行的解决方案:
方案1:绑定命名空间的标准写法(推荐)
如果你的XPath工具/代码支持绑定命名空间前缀,先绑定两个前缀:
soap对应http://schemas.xmlsoap.org/soap/envelope/test对应urn:TestAPI:testingtestingAPI
然后使用以下XPath:
/soap:Envelope/soap:Body/test:runResponse/test:wsOut/text()
这个写法完全符合XML命名空间规范,适合生产环境使用。
方案2:忽略命名空间的快速写法(仅用于测试)
如果不想处理命名空间,可以通过匹配元素本地名的方式查询,适合临时测试:
/*[local-name()='Envelope']/*[local-name()='Body']/*[local-name()='runResponse']/*[local-name()='wsOut']/text()
注意:这种写法在存在同名不同命名空间的元素时会出错,不推荐生产环境使用。
方案3:简化的路径写法(假设工具自动处理默认命名空间)
部分XML处理工具会自动识别默认命名空间,你可以尝试修正前缀后的简化路径:
/SOAP-ENV:Envelope/SOAP-ENV:Body/runResponse/wsOut/text()
但这种写法兼容性较差,还是推荐方案1。
内容的提问来源于stack exchange,提问作者JPO
相关产品推荐
相关产品推荐

