2012-03-30 83 views
3

XPath过滤项目我不知道所以我有一些麻烦,找到线索的术语。
基本上假设我有类似与特定元素

<book> 
    <genre>sci-fi</genre> 
    <genre>happy</genre> 
</book> 
<book> 
    <genre>romance</genre> 
</book> 

我想查询的不具有“科幻”为体裁的一个书单。 我尝试一些简单的像

//book[//book/genre != "sci-fi"] 

的想法,这将返回所有的不具有“科幻”值类型元素的书籍,但它仍然会返回第一个原因之一它的风格是不是“科幻”

此外,我将如何短语的方式,人都会有一个想法是什么我谈论这个问题?

回答

7

为方括号的术语是谓词。您正在寻找不具有所谓的流派与“科幻”的文本子元素书的元素。这一套将至少与一种不是科幻的流派相匹配。

//book[genre != "sci-fi"] 

下面将做你想要什么:

//book[not(genre = 'sci-fi')] 

而且注意,您可以再添加其他路径的是结束,所以如果你的书有一个title元素,你可以得到所有的标题与:

//book[not(genre = 'sci-fi')]/title 
+0

乍一看,他们似乎在逻辑上意味着同样的事情。为什么这个“不”在工作时=!不? – MxyL 2012-03-30 20:29:53

+1

'[流派!=“科幻”]'表示“匹配的那些具有至少一个流派这是不科幻”。 '[否(流派=“科幻”)]'表示“不匹配那些确实具有至少一个流派等于科幻”。 – Dave 2012-03-30 20:32:49

+0

哦,我现在明白了。谢谢。 – MxyL 2012-03-30 20:35:13