1

如果我们有一个 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 是否存在于所有 /STICKERINFO/ORDER/

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

4

2 回答 2

4

这个 XPath 1.0(以及 XPath 2.0)表达式

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

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

因此,您所追求的(其中一个)XPath 表达式是

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

说明

这是双重否定法的简单应用。:)

于 2012-10-12T12:30:12.603 回答
3

XPath 2.0 有“每一个”:

 every $order in /STICKERINFO/ORDER satisfies boolean($order/STICKER/ARTICLE)

在 XPath 1 中,您可以测试每个订单是否有文章,即订单数是否与带有文章的订单数相同:

  count(/STICKERINFO/ORDER) =  count(/STICKERINFO/ORDER[STICKER/ARTICLE])
于 2012-10-12T07:06:07.513 回答