我有一个
XML SOAP结果:
<?xml version="1.0" encoding="utf-8"?> <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> <CreateCIInStockResponse xmlns="http://somenamespace.com/"> <CreateCIInStockResult> <Status>OK</Status> <Data>SOMERESULT</Data> </CreateCIInStockResult> </CreateCIInStockResponse> </soap:Body> </soap:Envelope>
如您所见,CreateCIInStockResponse中定义的命名空间使用默认命名空间 – 未定义前缀.
如果我们使用,我可以同时获得状态和数据
/soap:Envelope/soap:Body/node()/node()/node()/text()
我是对的,没有办法 – 使用XPath – 直接访问“数据”的内容?
我的问题是,我既不能修改对webservice的调用,也不能修改从webservice返回的结果.我所能做的就是使用XPath来获取数据.
有什么建议么?
将
http://somenamespace.com/分配给名称空间前缀,例如“def”,并在XPath表达式中使用它:
/ SOAP:信封/ SOAP:身体/ DEF:CreateCIInStockResponse / DEF:数据
如何分配前缀将根据您的XPath处理器而有所不同.
更新:如果分配前缀不是一个选项,则为替代方法:
/soap:Envelope/soap:Body/*[local-name()='CreateCIInStockResponse']/*[local-name()='Data']
为了确保您正在访问所期望的元素,您可以添加namespace-uri()=’http://somenamespace.com/‘.