加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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/‘.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读