222 votos

Comprobar si una cadena es nulo o vacío en XSLT

¿Cómo puedo comprobar si un valor es nulo o vacío con XSL?

Por ejemplo, si categoryName está vacía? Voy a usar una cuando la elección de construcción.

Por ejemplo:

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

238voto

steamer25 Puntos 4224
test="categoryName != ''"

204voto

johnvey Puntos 3304

En ausencia de cualquier otra información, voy a asumir el siguiente código XML:

<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 ejemplo de caso de uso sería:

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

40voto

Chris Doggett Puntos 9987

De Elemento Vacío:

Para probar si el valor de un determinado nodo está vacía

Depende de lo que entendemos por vacío.

  • No contiene nodos secundarios: no(nodo())
  • No contiene ningún contenido de texto: no(string(.))
  • No contiene texto distinto de espacio en blanco: no(normalize-space(.))
  • No contiene nada, excepto de los comentarios: no(nodo()[no(self::comentario())])

13voto

helcim Puntos 269

¿Qué?

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

8voto

Borkke Puntos 71

Dos primeros a lidiar con valor nulo y el segundo dos lidiar con la cadena vacía.

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X