353 votes

Vérifiez si une chaîne est nulle ou vide dans XSLT

Comment puis-je vérifier si une valeur est nulle ou vide avec XSL ?

Par exemple, si categoryName est vide? J'utilise un en choisissant la construction.

Par exemple:

 <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 Points 4224
test="categoryName != ''"

301voto

johnvey Points 3304

Absent de toute autre information, je vais supposer le XML suivant:

 <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>
 

Un exemple de cas d'utilisation ressemblerait à ceci:

 <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 Points 9987

De l' élément vide :

Pour tester si la valeur d'un certain noeud est vide

Cela dépend de ce que vous voulez dire par vide.

  • Ne contient aucun noeud enfant: not (node ​​())
  • Ne contient aucun contenu textuel: not (string (.))
  • Ne contient aucun texte autre que les espaces: not (normalize-space (.))
  • Ne contient rien sauf commentaires: not (node ​​() [not (self :: comment ())])

26voto

helcim Points 269

Qu'en est-il de?

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

10voto

Borkke Points 71

Les deux premiers traitent la valeur nulle et les deux autres traitent la chaîne vide.

 <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>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X