我有这个场景,由SOAP WS返回
<?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
我确信存在一种聪明的方法来做到这一点,但也许我不知道。有人可以给我指点吗?
答案 0 :(得分:0)
XPath本身并不能阻止您注册多个名称空间,因此您可以在XPath表达式中使用多个前缀。例如/ns1:element-1/ns2:element-2
。完全不使用前缀与不具有命名空间的匹配元素相同。
DOM API具有方法getElementsByTagNameNS()
,用于匹配具有命名空间的元素。