xml - 如何通过 XPATH 检查元素是否存在于所有父元素中

标签 xml xpath

如果我们有一个 XML 文档:

<?xml version="1.0" encoding="utf-8"?>
<STICKERINFO>
    <ORDER>
        <NUMBER>0171467783</NUMBER>
        <STICKER>
            <ARTICLE>03359140001</ARTICLE>
        </STICKER>
        <STICKER>
            <ARTICLE>11408038001</ARTICLE>
        </STICKER>
    </ORDER>
    <ORDER>
        <NUMBER>0171473000</NUMBER>
    </ORDER>
</STICKERINFO>

我可以检查 /STICKERINFO/ORDER/STICKER/ARTICLE 是否存在:

boolean(/STICKERINFO/ORDER/STICKER/ARTICLE)

但是我如何检查/STICKERINFO/ORDER/STICKER/ARTICLE 是否存在于 all /STICKERINFO/ORDER/ 中?

在当前示例中,XPATH 表达式应返回 false

最佳答案

此 XPath 1.0(以及 XPath 2.0)表达式:

boolean(/STICKERINFO/ORDER[not(STICKER/ARTICLE)])

产生true()当至少有一个/STICKERINFO/ORDER时没有 STICKER/ARTICLE 的元素后裔。

因此,您要查找的(其中一个)XPath 表达式是:

not(/STICKERINFO/ORDER[not(STICKER/ARTICLE)])

说明:

这是 Double Negation Law 的一个简单应用程序。 :)

关于xml - 如何通过 XPATH 检查元素是否存在于所有父元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853882/

相关文章:

.net - 与 XML 序列化的奇遇

xml - 什么时候以及为什么 XML 比 CSV 更可取?

xpath - X-Path Builder 中的 Sitecore 查询表示法

javascript - 为什么我的 NodeJS 脚本在 fs.readFile 和 fs.appendFile 处理大量文件时陷入困境。

python - 在列表中查找节点的编号(位置)

xml - 在 Perl 中使用 XML::LibXML 更改 XML 文件:换行符是 Unix,不是 Windows

c# - XML XNA 对象反序列化

xml - 使用 qooxdoo 编写 xml

tsql - 使用TSQL和XQuery解析XML-获取给定元素值的属性值

html - 选择文本而不使用同级标记