Compruebe si una cadena es nula o está vacía en XSLT
¿Cómo puedo comprobar si un valor es nulo o está vacío con XSL ?
Por ejemplo, ¿si categoryName
está vacío? Estoy usando a al elegir una 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>
test="categoryName != ''"
Editar : Esto cubre la interpretación más probable, en mi opinión, de "[no] nulo o vacío" como se infiere de la pregunta, incluido su pseudocódigo y mi propia experiencia temprana con XSLT. Es decir, "¿Cuál es el equivalente del siguiente Java?":
// Equivalent Java, NOT XSLT
!(categoryName == null || categoryName.equals(""))
Para obtener más detalles, por ejemplo, identificar claramente nulo versus vacío, consulte la respuesta de Johnvey a continuación y/o el 'violín' XSLT que he adaptado de esa respuesta, que incluye la opción en el comentario de Michael Kay, así como la sexta interpretación posible.
A falta de cualquier otra información, asumiré el siguiente 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 caso de uso de muestra sería el siguiente:
<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>