如果我们有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/
中是否存在/ STICKERINFO / ORDER / STICKER / ARTICLE?
在当前示例中,XPATH表达式应返回false
答案 0 :(得分: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)])
<强>解释强>:
这是 Double Negation Law 的简单应用。 :)
答案 1 :(得分:3)
XPath 2.0拥有'every':
every $order in /STICKERINFO/ORDER satisfies boolean($order/STICKER/ARTICLE)
在XPath 1中,您可以测试每个订单是否有文章,即订单数量是否与订单数量相同:
count(/STICKERINFO/ORDER) = count(/STICKERINFO/ORDER[STICKER/ARTICLE])