2012-03-30 5 views
3

Я не уверен в терминологии, поэтому у меня есть проблемы с поиском потенциальных клиентов.
В принципе, я полагаю, что-то вродеxpath фильтрует элементы с определенным элементом

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

И я хочу, чтобы запросить список книг, которые не имеют «Sci-Fi», как один из жанров. я пытался что-то простое, как

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

С идеей, что он будет возвращать все книги, которые не имеют жанровый элемент с «научно-фантастического» ценности, но она все равно возвратит первый, потому что один из его жанр не «научно-фантастический»

Кроме того, как бы я сформулировал этот вопрос так, чтобы люди поняли, о чем я говорю?

ответ

7

Термин квадратная скобка является предикатом. Вы ищете элементы книги, у которых нет дочернего элемента, называемого жанром, с текстом «sci-fi». Это будет соответствовать всем книгам, по крайней мере, по одному жанру, который не является научно-фантастическим.

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

Ниже будет делать то, что вы хотите:

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

И заметьте, что вы можете добавить дополнительные пути к концу этого периода, так что если ваша книга была title элемент, который вы могли бы получить все названия с:

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

На первый взгляд они, похоже, логически совпадают. Почему это «не» работает, когда! = Нет? – MxyL

+1

'[жанр! =" Sci-fi "]' означает "соответствуют тем, у которых есть хотя бы один жанр, который не является sci-fi". '[not (жанр = 'sci-fi')]' означает "не соответствуют тем, которые имеют хотя бы один жанр, равный sci-fi". – Dave

+0

О, я понял. Благодарю. – MxyL

Смежные вопросы