Geschachtelte bedingte if else-Anweisungen in xpath

7

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.

    
Kirk WSI 19.10.2012, 15:15
quelle

4 Antworten

18

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 :

%Vor%

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:

%Vor%

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:

%Vor%

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.

    
Dimitre Novatchev 19.10.2012, 15:34
quelle
2

Beckers Methode für Ihre Daten ist die folgende:

%Vor%     
choroba 19.10.2012 15:39
quelle
1

Verbrachte den ganzen Tag heute, aber funktioniert für mich ist dies für Xpath 1.0:

%Vor%     
Pavel Philippenko 11.11.2015 22:54
quelle
0

Versuchen Sie es

%Vor%     
Mirko Adari 19.10.2012 15:30
quelle