如何忽略XPath 1.0中的命名空间?

时间:2016-10-04 12:57:41

标签: xml xpath xpath-1.0

我在尝试理解XPath的魔力时遇到了严重的问题。

基本上,我有一些像这样的XML:

<a>
    <b>
        <c/>
    </b>
</a>

现在,我想要计算我们有多少B,没有C'。使用以下XPath可以轻松完成此操作:

count(*/b[not(descendant::c)])

现在的问题很简单:我如何做同样的事情,同时忽略任何命名空间?

我想它就是这样的?

count(*/[local-name()='b']/[not(descendant::[local-name()='c'])])

但这不正确。什么是我上面的等效XPath,但忽略名称空间?

1 个答案:

答案 0 :(得分:3)

给定的XPath,

count(*/b[not(descendant::c)])
可以重写

以忽略名称空间,如下所示:

count(*[local-name()='b' and not(descendant::*[local-name()='c'])])

请注意,通常最好不要破坏名称空间,而是通过分配名称空间前缀并在XPath表达式中使用它们来正确使用名称空间。