首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套命名空间:如何检索内部节点

嵌套命名空间:如何检索内部节点
EN

Stack Overflow用户
提问于 2014-03-11 14:41:15
回答 1查看 524关注 0票数 0

我有这样的场景,由SOAP WS返回

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
        <ns1:myFunctionEnvelopeName xsi:type="xsd:string" xmlns:ns1="http://fooNameSpace.comm">
            <myFunctionName xmlns="http://barNameSpace.com">
                [some nodes here]
            </myFunctionName>
        </ns1:myFunctionEnvelopeName>
    </soapenv:Body>
</soapenv:Envelope>

我想选择myFunctionName的子节点,但是我有一些问题

  • 如果我将ns1命名空间注册到我的XPath中,我只能选择myFunctionEnevelopeName (即使我尝试使用getElementsByTagName(),我也可以接收回0节点)
  • 如果我注册,比方说,用ns2注册barNameSpace.com,我的查询将不会返回元素
    • 如果我没有注册任何名称空间,我的查询就不会返回我的元素。

我找到的唯一解决办法就是

  • ns1注册为XPath的命名空间
  • 检索“主节点”(myFunctionEnevelopeName)
  • 从“主节点”提取textContent (当然,这是一个有效的xml)
  • 使用获得的文本内容创建一个全新的Xpath
  • ns2注册为全新Xpath的命名空间
  • 得到我想要的

我相信这是一种聪明的方法,但也许我不知道。有人能给我指点吗?

EN

回答 1

Stack Overflow用户

发布于 2014-03-11 15:48:36

XPath本身并不妨碍您注册多个名称空间,因此可以在XPath表达式中使用多个前缀。例如,/ns1:element-1/ns2:element-2。不使用前缀与没有命名空间的匹配元素是一样的。

DOM有用于将元素与命名空间匹配的方法getElementsByTagNameNS()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22329028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档