Xpath - 选择每个书籍列表包含它的商店

时间:2013-12-09 00:08:40

标签: xml xpath

我遇到了特定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)])] 

但它会选择每个至少出现一次的商店。

1 个答案:

答案 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]