如何用XSL检查一个值是空还是空?
例如,如果categoryName为空?我使用的是“当选择”结构。
例如:
<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>
在某些情况下,您可能想知道值什么时候具体为null,这在使用从. net对象序列化的XML时尤其必要。虽然接受的答案适用于此,但当字符串为空白或空时,它也返回相同的结果。,所以你无法区分。
<group>
<item>
<id>item 1</id>
<CategoryName xsi:nil="true" />
</item>
</group>
因此,您可以简单地测试属性。
<xsl:if test="CategoryName/@xsi:nil='true'">
Hello World.
</xsl:if>
有时需要知道确切的状态,而不能简单地检查CategoryName是否已实例化,因为与Javascript不同
<xsl:if test="CategoryName">
Hello World.
</xsl:if>
对于空元素将返回true。
在某些情况下,您可能想知道值什么时候具体为null,这在使用从. net对象序列化的XML时尤其必要。虽然接受的答案适用于此,但当字符串为空白或空时,它也返回相同的结果。,所以你无法区分。
<group>
<item>
<id>item 1</id>
<CategoryName xsi:nil="true" />
</item>
</group>
因此,您可以简单地测试属性。
<xsl:if test="CategoryName/@xsi:nil='true'">
Hello World.
</xsl:if>
有时需要知道确切的状态,而不能简单地检查CategoryName是否已实例化,因为与Javascript不同
<xsl:if test="CategoryName">
Hello World.
</xsl:if>
对于空元素将返回true。
test="categoryName != ''"
编辑:在我看来,这涵盖了从问题中推断出的对“[非]空或空”最可能的解释,包括它是伪代码和我自己早期使用XSLT的经验。例如,“下面的Java的等价物是什么?”:
// Equivalent Java, NOT XSLT
!(categoryName == null || categoryName.equals(""))
有关更多细节,例如,明确识别null和empty,请参阅下面johnvey的回答和/或我从该回答改编的XSLT“小提琴”,其中包括Michael Kay评论中的选项以及第六种可能的解释。