使用XPath选择无命名空间的节点

9

I have a xml like

<root xmlns:ns1="http://foo">
    <ns1:child1>Text</ns1:child1>
    <ns1:child2>Number</ns1:child2>
</root>

现在我从不同的人那里得到这个,比如说第二个人用与之相同的结构给我发送了另一条消息。
<root xmlns:anotherNs="http://foo">
    <anotherNs:child1>Another Text</anotherNs:child1>
    <anotherNs:child2>Another Number</anotherNs:child2>
</root>

唯一的区别就是命名空间的名称。我如何使用一个XPath表达式来选择两个xml文档中child2的内容?

像 "/root/child2" 或者 "//child2" 这样的表达式没有起作用。

2个回答

22
使用local-name()函数的方法如下:
//*[local-name()='child2']

1
您可以将任何前缀(比如banana)绑定到命名空间"http://foo",表达式"/root/banana:child2"将找到child2元素,无论源文档中使用了什么命名空间前缀。只需匹配命名空间URI即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接