353 Stimmen

Prüfen, ob ein String in XSLT null oder leer ist

Wie kann ich prüfen, ob ein Wert null oder leer ist mit XSL ?

Zum Beispiel, wenn categoryName leer ist? Ich verwende eine bei der Auswahl konstruieren.

Zum Beispiel:

<xsl:choose>
    <xsl:when test="categoryName !=null">
        <xsl:value-of select="categoryName " />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="other" />
    </xsl:otherwise>
</xsl:choose>

351voto

steamer25 Punkte 8710
test="categoryName != ''"

Editar : Dies deckt meiner Meinung nach die wahrscheinlichste Interpretation von "[not] null or empty" ab, wie sie sich aus der Frage ergibt, einschließlich des Pseudocodes und meiner eigenen frühen Erfahrung mit XSLT. D.h. "Was ist das Äquivalent des folgenden Java?":

// Equivalent Java, NOT XSLT
!(categoryName == null || categoryName.equals(""))

Für weitere Einzelheiten, z. B. die eindeutige Unterscheidung zwischen null und leer, siehe johnveys Antwort unten y/o die XSLT-Tüftelei Ich habe mich an dieser Antwort orientiert, die sowohl die Option in Michael Kays Kommentar als auch die sechste mögliche Interpretation enthält.

301voto

johnvey Punkte 5004

In Ermangelung anderer Informationen gehe ich von der folgenden XML-Datei aus:

<group>
    <item>
        <id>item 1</id>
        <CategoryName>blue</CategoryName>
    </item>
    <item>
        <id>item 2</id>
        <CategoryName></CategoryName>
    </item>
    <item>
        <id>item 3</id>
    </item>
    ...
</group>

Ein Beispiel für einen Anwendungsfall könnte folgendermaßen aussehen:

<xsl:for-each select="/group/item">
    <xsl:if test="CategoryName">
        <!-- will be instantiated for item #1 and item #2 -->
    </xsl:if>
    <xsl:if test="not(CategoryName)">
        <!-- will be instantiated for item #3 -->
    </xsl:if>
    <xsl:if test="CategoryName != ''">
        <!-- will be instantiated for item #1 -->
    </xsl:if>
    <xsl:if test="CategoryName = ''">
        <!-- will be instantiated for item #2 -->
    </xsl:if>
</xsl:for-each>

78voto

Chris Doggett Punkte 18701

Von Leeres Element :

So testen Sie, ob der Wert eines bestimmten Knotens leer ist

Das hängt davon ab, was Sie mit "leer" meinen.

  • Enthält keine Kindknoten: not(node())
  • Enthält keinen Textinhalt: not(string(.))
  • Enthält keinen anderen Text als Leerzeichen: not(normalize-space(.))
  • Enthält nichts als Kommentare: not(node()[not(self::comment())])

26voto

helcim Punkte 759

Worüber?

test="not(normalize-space(categoryName)='')"

10voto

Die ersten beiden befassen sich mit dem Nullwert und die zweiten beiden mit der leeren Zeichenfolge.

<xsl:if test="USER/FIRSTNAME">
    USERNAME is not null
</xsl:if>
<xsl:if test="not(USER/FIRSTNAME)">
    USERNAME is null
 </xsl:if>
 <xsl:if test="USER/FIRSTNAME=''">
     USERNAME is empty string
 </xsl:if>
 <xsl:if test="USER/FIRSTNAME!=''">
     USERNAME is not empty string
 </xsl:if>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X