XSL中节点结果集返回后如何检查空值?含变量检查示例
在XSL里处理节点空值的需求太常见了,我结合你给出的$testing变量,给你讲几种实用的检查和处理方法:
方法一:用
count()函数检查节点数量 count()函数会返回节点集里的节点总数,如果节点集为空,返回值就是0,非常直观:
<xsl:variable name="testing" select="node/nodeset/nodevalueresult"/> <!-- 检查节点集是否为空 --> <xsl:if test="count($testing) = 0"> <p>没有匹配到任何节点</p> </xsl:if> <!-- 节点存在时的处理 --> <xsl:if test="count($testing) > 0"> <p>找到节点,值为:<xsl:value-of select="$testing"/></p> </xsl:if>
这种方法适合你需要明确知道节点数量的场景,比如判断是否有多个匹配节点的时候也能用。
方法二:直接判断节点是否存在
在XSL的条件表达式里,节点集本身可以作为布尔值使用——如果节点集非空(至少有一个节点),就返回true,空则返回false。写法比count()更简洁:
<xsl:variable name="testing" select="node/nodeset/nodevalueresult"/> <xsl:choose> <xsl:when test="$testing"> <p>节点存在,值为:<xsl:value-of select="$testing"/></p> </xsl:when> <xsl:otherwise> <p>节点集为空</p> </xsl:otherwise> </xsl:choose>
如果只是简单判断存不存在,这种写法更高效,也更易读。
方法三:区分“节点不存在”和“节点存在但值为空”
有时候你需要区分两种情况:一种是根本没有这个节点,另一种是节点存在,但值是空字符串。这时候可以拆分判断:
<xsl:variable name="testing" select="node/nodeset/nodevalueresult"/> <xsl:choose> <xsl:when test="not($testing)"> <p>节点不存在</p> </xsl:when> <xsl:when test="$testing = ''"> <p>节点存在,但值为空</p> </xsl:when> <xsl:otherwise> <p>节点值:<xsl:value-of select="$testing"/></p> </xsl:otherwise> </xsl:choose>
小提示:如果用的是XSLT 2.0及以上版本,还可以用exists()函数来判断节点是否存在,语义更明确:<xsl:when test="exists($testing)">,效果和直接写$testing一样,但可读性更强。
内容的提问来源于stack exchange,提问作者Ekaku509
相关产品推荐
相关产品推荐

