XPath 1.0 exklusiver oder node-set-Ausdruck

8

Was ich brauche, scheint nicht ganz so zu sein, worum es bei anderen Artikeln eines ähnlichen Titels geht.

Ich benötige mit Xpath 1, um den Knoten a oder den Knoten b in dieser Reihenfolge ausschließen zu können. Das heißt, Knoten a, falls vorhanden, andernfalls Knoten b.

ein xpath Ausdruck wie:

expression | expression

wird mich beide in dem Fall bekommen, wenn sie beide existieren. das ist nicht was ich will.

Ich könnte gehen:

(expression | expression)[last()]

Was mich tatsächlich dazu bringt, was ich brauche (in meinem Fall), scheint aber etwas ineffizient zu sein, weil es beide Seiten des Ausdrucks auswertet, bevor das letzte Ergebnis ausgewählt wird. Ich habe auf einen Ausdruck gehofft, der aufhören wird zu funktionieren, sobald die linke Seite erfolgreich ist.

Ein konkreteres Beispiel für XML

%Vor%

und der xpath, der funktioniert (aber ineffizient):

(/one/*[starts-with(local-name(.), 'blah')] | .)[last()]

Um klar zu sein, möchte ich den unmittelbaren Kindknoten von "Eins" nehmen, der mit "Blah" beginnt. Wenn es aber nicht existiert, möchte ich nur den aktuellen Knoten. Wenn der 'blah' Knoten existiert, möchte ich den aktuellen Knoten nicht.

Gibt es einen effizienteren Weg, dies zu erreichen?

    
svaens 26.09.2014, 15:45
quelle

1 Antwort

1
  

Ich muss mit Xpath 1 Knoten A oder Knoten b erhalten,   ausschließend, in dieser Reihenfolge. Das heißt, Knoten a, wenn es existiert, andernfalls   Knoten b.

     

ein xpath Ausdruck wie:

     

expression | expression

     

wird mich beide in dem Fall bekommen, wenn sie beide existieren. das ist nicht was ich will.

     

Ich könnte gehen:

     

(expression | expression)[last()]

     

Was mich tatsächlich dazu bringt, was ich brauche (in meinem Fall),

Diese Aussage ist nicht wahr .

Hier ist ein Beispiel. Lassen Sie uns dieses XML-Dokument haben:

%Vor%

Ausdruck1 ist :

%Vor%

Ausdruck2 ist :

%Vor%

Ihr zusammengesetzter Ausdruck :

%Vor%

Wenn wir die beiden obigen Ausdrücke ersetzen, ist

%Vor%

Und dieser Ausdruck wählt tatsächlich b - nicht a - weil b der letzte der beiden in der Reihenfolge der Dokumente ist.

Nun, hier ist ein Ausdruck, der nur a auswählt, wenn er existiert, und b nur dann auswählt, wenn a nicht existiert - unabhängig von der Dokumentenreihenfolge:

%Vor%

Wenn dieser Ausdruck im obigen XML-Dokument ausgewertet wird, wählt er a , unabhängig von seiner Dokumentenreihenfolge - versuchen Sie, das XML-Dokument über den Stellen von a und b auszutauschen, um dies in beiden Fällen zu bestätigen Das ausgewählte Element ist a .

Zusammenfassend ist ein Ausdruck, der den gewünschten Knoten unabhängig von einer Dokumentreihenfolge auswählt:

%Vor%

Lassen Sie uns diesen allgemeinen Ausdruck in Ihrem Fall anwenden:

Ausdruck1 ist :

%Vor%

Ausdruck2 ist :

%Vor%

Der gewünschte Ausdruck (nach dem Ersetzen von Ausdruck1 und Ausdruck2 im obigen allgemeinen Ausdruck) lautet:

%Vor%     
Dimitre Novatchev 21.09.2015 23:04
quelle

Tags und Links