Ich habe folgendes XML:
%Vor% Ich möchte alle name
von book
in myBooks
erhalten, die keine entsprechende book
in books
(Titel und Autor) haben.
Also, für das Beispiel möchte ich Folgendes abrufen: das Buch "Test2"
, weil das Paar ("Title 2", "Author 1")
nicht in books
existiert.
Bisher habe ich:
%Vor%Aber natürlich funktioniert in diesem Fall der obige XPath nicht, weil die Kombination ("Titel 2", "Autor 1") existiert (aus "book2" und "book1").
Wie kann ich den Operator and
auf demselben Knoten anwenden?
Das hängt von der Version von XPath ab.
Dies ist in einem einzelnen XPath 1.0-Ausdruck nicht möglich, da hierfür eine Struktur wie
erforderlich wäre %Vor% d. Sie müssten das zu testende Buch mit dem äußeren Prädikat aufnehmen, damit Sie es mit dem inneren Prädikat vergleichen können. Pure XPath 1.0 unterstützt dies nicht, Sie müssten den Inhalt von myBooks
selbst durchlaufen (z. B. mit einem xsl:for-each
, da Sie Ihre Frage "xslt" getaggt haben).
In XPath 2.0 können Sie dies in einem Ausdruck mit einem expliziten Quantifizierer tun
%Vor% Unter der Annahme von XSLT würde ich einen Schlüssel <xsl:key name="book" match="books/book" use="concat(@title, '|', @author)"/>
definieren und dann im Prädikat [not(key('book', concat(@title, '|', @author)))]
überprüfen.