2012-03-30 17 views
3

Ich bin mir nicht sicher über die Terminologie und habe daher Probleme, Leads zu finden.
Grundsätzlich nehme ich an so etwas wiexpath Filterelemente mit einem bestimmten Element

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

Und ich möchte eine Liste der Bücher, die Abfrage, die keine „Science-Fiction“ als eines der Genres haben. habe ich versucht, etwas Einfaches wie

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

Mit der Idee, dass es alle Bücher zurück, die mit „Sci-Fi“ Wert nicht ein Genre Element haben, aber es wäre immer noch die erste zurück, weil eine sein Genre ist nicht "Science-Fiction"

Auch, wie würde ich diese Frage so formulieren, dass die Leute eine Idee haben, worüber ich spreche?

Antwort

7

Der Begriff für die eckige Klammer ist ein Prädikat. Sie suchen nach Elementen des Buches, die kein Kindelement namens Genre mit dem Text "Science-Fiction" haben. Dieser passt alle Bücher mit mindestens einem Genre an, das kein Science-Fiction ist.

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

Im Folgenden wird das tun, was Sie wollen:

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

Und beachten Sie, dass Sie dann zusätzliche Pfade zu Ende, dass hinzufügen, so dass, wenn Ihr Buch ein title Element hatte Sie alle bekommen konnte die Titel mit:

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

Auf den ersten Blick scheinen sie logisch das gleiche zu bedeuten. Warum funktioniert das "nicht" wenn = nicht? – MxyL

+1

'[genre! =" Sci-fi "]' bedeutet "passe auf diejenigen an, die mindestens ein Genre haben, das kein Science-Fiction ist". '[nicht (genre = 'sci-fi')]' bedeutet "passe nicht zu denen, die mindestens ein Genre haben, das sci-fi entspricht". – Dave

+0

Oh, ich verstehe es jetzt. Vielen Dank. – MxyL

Verwandte Themen