Wie kann man wissen, dass die Variable in XSLT einen Wert hat oder nicht?

7

Ich erstelle eine XSLT-Datei. Ich habe eine Variable, die Wert von XML-Datei nehmen. Aber es kann vorkommen, dass es keine Referenz in XML für den Wert gibt und zu diesem Zeitpunkt gibt XSL-Variable False / None zurück (weiß nicht). Ich möchte Bedingung wie If beibehalten Es gibt keinen Wert für die Variable, verwenden Sie den Standardwert. Wie geht das ?

    
DSS 18.11.2010, 19:44
quelle

5 Antworten

18

Mit den wenigen Details in der Frage ist der einfachste Test, den Sie machen können:

%Vor%

Oder Sie verwenden xsl:choose , wenn Sie eine Ausgabe für den else-case bereitstellen möchten:

%Vor%

Das zweite Beispiel wird auch den Fall korrekt behandeln, dass die Variable oder der Parameter nicht mit einem tatsächlichen Wert versorgt wurde, d. h. sie ist gleich der leeren Zeichenkette. Dies funktioniert, weil not('') true zurückgibt.

    
Dirk Vollmar 18.11.2010 19:46
quelle
12

Sie haben nicht erklärt, was Sie mit "hat keinen Wert" meinen. Hier ist eine allgemeine Lösung :

%Vor%

Dieser Ausdruck wird als true() ausgewertet, wenn $v "keinen Wert hat".

Beide Bedingungen müssen erfüllt sein, weil eine Zeichenfolge $v definiert als '0' einen Wert hat, aber not($v) ist true() .

In XSLT 1.0 kann die Verwendung eines Standards auf verschiedene Arten erreicht werden, wenn der "Wert" ein Knotensatz ist oder wenn der Wert ein Skalar ist (z. B. ein String, eine Zahl oder ein boolescher Wert).

@Alejandro bietet eine Möglichkeit, einen Standardwert zu erhalten, wenn eine Variable, die einen Knotensatz enthalten soll, leer ist.

Wenn die Variable einen Skalar enthalten soll, gibt der folgende Ausdruck seinen Wert zurück (wenn er einen Wert hat) oder (andernfalls) den gewünschten Standardwert:

%Vor%     
Dimitre Novatchev 18.11.2010 20:40
quelle
1

Sie können string-length verwenden, um zu überprüfen, ob eine Variable namens $reference zum Beispiel enthält irgendetwas.

%Vor%

Falls nötig, verwenden Sie auch normalize-space .

    
ceving 22.05.2017 15:15
quelle
0

Erstens haben alle Variablen Werte, weil XSLT zum deklarativen Paradigma gehört: Es gibt keine Asignationsanweisung, aber wenn Sie die Variable deklarieren, deklarieren Sie auch den Ausdruck für ihre Wertbeziehung.

Wenn es sich bei diesem Wert um einen Knotensatz-Datentyp handelt (der aus Ihrer Frage hervorgeht), sollten Sie nach einem leeren Knotensatz suchen, falls nichts ausgewählt wurde. Der effektive boolesche Wert für einen leeren Knotensatz ist falsch. Also, als @ 0xA3 hat geantwortet: test="$node-set" .

Sie haben geschrieben:

  

Wenn es keinen Wert für die Variable gibt   Verwende den Standardnamen. Wie geht das?

Nun, das hängt davon ab, welchen Datentyp Sie suchen.

Nehmen Sie den Datentyp des Knotens an: Wenn Sie $ node-set-1 value oder $ node-set-2 wollen, wenn $ node-set-1 leer ist, dann verwenden Sie:

%Vor%     
user357812 18.11.2010 20:02
quelle
0

Ich habe eine Menge Lösung von SO versucht, meine letzte Lösung wurde von @ dimitre-novatchev übernommen, aber diese funktioniert auch nicht jedes Mal. Kürzlich fand ich eine weitere Lösung von zufälliger Google-Suche, gedacht, um mit der Gemeinschaft zu teilen.

Um den leeren Variablenwert zu überprüfen, können wir eine leere Variable deklarieren und ihren Wert mit der Testbedingung vergleichen. Hier ist ein Codeausschnitt:

%Vor%

Hier hält testVariableValue den Wert der neuen zu testenden Variable für leer Szenario. Ich hoffe, es würde helfen, den leeren Variablenstatus zu testen.

    
Sudip7 08.12.2015 11:39
quelle

Tags und Links