如何使用XSL检查值是否为null或为空?
例如,如果categoryName
为空?
这可能是最简单的XPath表达式(接受的答案中的一个提供了相反的测试,如果被否定,则更长):
not(string(categoryName))
说明:
not()
上面函数的参数false()
恰好在categoryName
上下文项没有子代(“ null”)或(单个)categoryName
子代有字符串值(即空字符串)的情况下。
我在选择构造时使用了a 。
例如:
<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>
在XSLT 2.0中使用:
<xsl:copy-of select="concat(categoryName, $vOther[not(string(current()/categoryName))])"/>
这是一个完整的示例:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOther" select="'Other'"/>
<xsl:template match="/">
<xsl:copy-of select="concat(categoryName,$vOther[not(string(current()/categoryName))])"/>
</xsl:template>
</xsl:stylesheet>
在以下XML文档上应用此转换时:
<categoryName>X</categoryName>
产生想要的正确结果:
X
当应用于此XML文档时:
<categoryName></categoryName>
或在此:
<categoryName/>
或在此
<somethingElse>Y</somethingElse>
产生正确的结果:
Other
同样,使用以下XSLT 1.0转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vOther" select="'Other'"/>
<xsl:template match="/">
<xsl:copy-of select=
"concat(categoryName, substring($vOther, 1 div not(string(categoryName))))"/>
</xsl:template>
</xsl:stylesheet>
注意:完全不使用任何条件。在这个不错的Pluralsight课程中了解有关避免条件构造的重要性的更多信息:
“ .NET中的战术设计模式:控制流 ”