使用XPath选择不带名称空间的节点

时间:2013-02-28 15:58:25

标签: xpath xml-namespaces

我有像

这样的xml
<root xmlns:ns1="http://foo">
    <ns1:child1>Text</ns1:child1>
    <ns1:child2>Number</ns1:child2>
</root>

现在我从不同的人那里得到这个,所以例如第2个人发给我另一个具有相同结构的消息,如

<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 个答案:

答案 0 :(得分:16)

使用local-name()功能,如下所示:

//*[local-name()='child2']

答案 1 :(得分:0)

您可以将任何您喜欢的前缀(比如香蕉)绑定到命名空间"http://foo",而表达式/root/banana:child2将找到child2元素,无论源文档中使用了什么名称空间前缀。只有名称空间URI必须匹配。