XSLT 1.0 Idiom für Ternär, wenn?

8

Dieses Java-Programm verwendet ein Ternary, wenn Booleans auf Ausgabe-Strings abgebildet werden sollen: (ein "*" für wahr, ein leerer String für false).

%Vor%

Also ist die Ausgabe *, [leer], *.

Ich habe ein Eingabe-XML-Dokument, etwa wie folgt:

%Vor%

Und ich habe die folgende XSLT-Vorlage, die mit '*' und falsch mit '' (es funktioniert) übereinstimmt:

%Vor%

Gibt es eine präzisere Version davon?

a) Kann ich automatisch einen Wert von boolean true | false direkt aus der Zeichenkette 'true | false' erhalten? b) Gibt es ein (xpath?) Konstrukt, um den Booleschen Wert | false auf '*', ''?

abzubilden?     
monojohnny 12.01.2012, 10:06
quelle

2 Antworten

8
  

a) Kann ich einen Wert von boolean true | false direkt von direkt erhalten?   die Zeichenfolge 'true | false'?

     

b) Gibt es ein (xpath?) Konstrukt, um die Boolesche Wahrheit |   '*', ''?

Dies ist eine XPath-Frage .

Ich. XPath 1.0

Es gibt mehr als einen XPath-Ausdruck, dessen Auswertung das gewünschte Ergebnis liefert:

%Vor%

Dies beantwortet auch b) - Beachten Sie, dass die Strings 'true' und 'false' keine booleschen Werte sind! Die einzigen zwei booleschen Werte sind true() und false() und sie sind keine Zeichenfolgen.

Im obigen Ausdruck verwenden wir die Tatsache, dass in XPath 1.0, wenn ein Boolescher Wert in einem Kontext ist, in dem eine Zahl benötigt wird, dieser automatisch in Zahl konvertiert wird. Per Definition:

number(true()) ist 1

und

number(false()) ist 0

Also das zweite Argument des Aufrufs von substring() oben:

%Vor%

wird als 1 ausgewertet, wenn @flag = 'true' und sonst 2 .

Ein allgemeiner XPath 1.0-Ausdruck, der die Zeichenfolge $s1 erzeugt, wenn $val "x" ist und die Zeichenfolge $s2 erzeugt, wenn $val ist "y" :

%Vor%

Dies erzeugt die Zeichenfolge $s1 wenn $val = "x" , die Zeichenfolge $s2 wenn $val = "y" und die leere Zeichenfolge - falls keine dieser beiden Bedingungen zutrifft.

Der obige XPath 1.0-Ausdruck kann verallgemeinert werden, um N verschiedene String-Ergebnisse zu erzeugen $s1 , , ..., $sN genau dann, wenn $val einer der Werte ist $v1 , $v2 , ..., $vN , weil die Funktion concat() eine beliebige Anzahl von Argumenten haben kann.

II. XPath 2.0 (XSLT 2.0)

%Vor%

Und allgemeiner ausgedrückt, bei 2 * N Atomwerten $s1 , $s2 , ... $sN und $v1 , $v2 , ..., $vN , so dass alle $vi Werte sind unterschiedlich, das Ergebnis der Evaluierung dieses XPath 2.0-Ausdrucks:

%Vor%

ist $sK genau, wenn $v eq $vK .

    
Dimitre Novatchev 12.01.2012, 13:35
quelle
1

Sie können hierfür einfache Mustervergleiche in Vorlagen verwenden.

%Vor%

Der erste entspricht also true Einträgen und der andere stimmt mit allen anderen Fällen überein (was in Ihren Fällen nur false

ist

Also, mit dem folgenden Stylesheet

%Vor%

Bei der Anwendung auf Ihre Beispiel-XML wird Folgendes ausgegeben:

%Vor%     
Tim C 12.01.2012 10:20
quelle

Tags und Links