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 ?
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:
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.
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% Sie können string-length
verwenden, um zu überprüfen, ob eine Variable namens $reference
zum Beispiel enthält irgendetwas.
Falls nötig, verwenden Sie auch normalize-space
.
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%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.
Tags und Links xslt