Ich habe dieses XML:
%Vor%und ich möchte eine xpath-Anweisung erstellen, die mit dem folgenden verschachtelten if-else-Pseudocode-Block identisch ist.
%Vor%Ich habe etwas über Beckers Methode gesehen, aber ich konnte es nicht wirklich nachvollziehen. XPath ist nicht wirklich meine Stärke.
Ich. In XPath 2.0 wird das einfach in übersetzt:
%Vor%XSLT 2.0-basierte Überprüfung :
%Vor%Wenn diese Umwandlung auf das bereitgestellte XML-Dokument angewendet wird:
%Vor%Der XPath-Ausdruck wird ausgewertet und das Ergebnis dieser Auswertung wird in die Ausgabe kopiert:
%Vor%II. XPath 1.0 Lösung
In XPath 1.0 gibt es keinen Operator if
.
Eine bedingte Anweisung kann immer noch mit einem einzelnen XPath 1.0-Ausdruck implementiert werden, aber das ist schwieriger und der Ausdruck ist möglicherweise nicht zu lesbar und verständlich.
Hier ist ein generischer Weg (zuerst von Jeni Tennison vorgeschlagen), $stringA
zu erzeugen, wenn eine Bedingung $cond
ist true()
und sonst $stringB
:
Eine der wichtigsten Eigenschaften dieser Formel ist, dass sie für Strings beliebiger Länge funktioniert und keine Längen angegeben werden müssen .
Erläuterung :
Hier verwenden wir die Tatsache, dass per Definition:
%Vor%und
%Vor%und das
%Vor% Also, wenn $cond
ist false
, das erste Argument von concat()
oben ist:
und das ist die leere Zeichenfolge, weil $stringA
eine endliche Länge hat.
Auf der anderen Seite, wenn $cond
ist true()
, dann ist das erste Argument von concat()
oben:
das ist nur $stringA
.
Also, abhängig vom Wert von $cond
ist nur eines der beiden Argumente von concat()
oben eine nichtleere Zeichenfolge (bzw. $stringA
oder $stringB
).
Wenn wir diese allgemeine Formel auf die spezifische Frage anwenden, können wir die erste Hälfte des großen Bedingungsausdrucks in
übersetzen %Vor%Dies sollte Ihnen eine Idee geben, wie Sie den gesamten bedingten Ausdruck in einen einzelnen XPath 1.0 Ausdruck übersetzen können.
XSLT 1.0-basierte Überprüfung :
%Vor%Wenn diese Transformation auf das bereitgestellte XML-Dokument (oben) angewendet wird, wird der XPath-Ausdruck ausgewertet und das Ergebnis dieser Auswertung wird in die Ausgabe kopiert:
%Vor%Beachten Sie :
Wenn Sie sich dazu entschließen, die spezifischen Zeichenfolgen durch andere Zeichenfolgen zu ersetzen, die eine andere Länge als das ursprüngliche aufweisen, ersetzen Sie diese Zeichenfolgen einfach im obigen XPath 1.0-Ausdruck, und Sie müssen sich keine Gedanken über Längenangaben machen.
Verbrachte den ganzen Tag heute, aber funktioniert für mich ist dies für Xpath 1.0:
%Vor%Tags und Links conditional xpath if-statement xpath-2.0