我遇到了特定XPath查询的问题。它与SO问题非常相似:Xpath select elements that contains a subset of specific list
我的情况是,XML看起来像这样。
<x>
<stores>
<store>
<book>b1</book>
</store>
<store>
<book>b2</book>
</store>
<store>
<book>b4</book>
</store>
</stores>
<Lists>
<List>
<wanted>
<book>b1</book>
<book>b2</book>
</wanted>
</List>
<List>
<wanted>
<book>b1</book>
<book>b4</book>
</wanted>
</List>
<List>
<wanted>
<book>b1</book>
</wanted>
</List>
</Lists>
</x>
一件重要的事情是商店的元素book
是一个关键所以它是唯一的。
我正在使用Xpath查询,该查询将选择在所有列表中都有书籍的商店。因此,在此示例中,它应该只是包含图书b1
的商店。
我已经制定了像这样的查询
/*/store[not(book[not(. = //wanted/book)])]
但它会选择每个至少出现一次的商店。
答案 0 :(得分:1)
您希望所有商店都有否 List
不包含此商店的书籍。我不认为这可以在纯XPath 1.0中完成,因为它需要在内部谓词中访问与外部表达式匹配的元素
/x/stores/store[not(/x/Lists/List[wanted/book != $outer/book])]
^
This store is $outer
在XPath 2.0中,您可以使用every
/x/stores/store[every $list in /x/Lists/List satisfies $list/wanted/book = book]