XML XPATH:使用默认命名空间的任何方法?
发布时间:2020-12-16 07:50:58 所属栏目:百科 来源:网络整理
导读:我有一个 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 C
我有一个
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/‘. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |