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

标签 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 但忽略 namespace ?

最佳答案

给定的 XPath,

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

可以重写以忽略命名空间,如下所示:
count(*[local-name()='b' and not(descendant::*[local-name()='c'])])

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

关于xml - 如何忽略 XPath 1.0 中的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39852979/

相关文章:

xslt-1.0 - XPath 中求和与求积的聚合函数

php - 从内联二进制附件创建 zip 到多部分消息

javascript - knockout 以保持 XML 节点大写

xpath - 使用 xPath 解析元标记

java - 基于另一个 XPath 元素查找元素的 XPath

java - Android XML 的字符串和整数混合数组?

xml - 使用 VBA 删除 Excel 中的 XML 重复项

python - 在Python中使用XPath提取属性值

html - 通过 XPath 1.0 连接可变数量的元素字符串值?