我正在创建XSLT文件。 我有一个变量,它从XML文件中获取值。但是,可能会出现在xml中没有对该值的引用,并且此时XSL变量将返回False/None(不确定)的情况。我想保持这样的条件,如果变量没有值,则使用默认值。 要如何实现?
我正在创建XSLT文件。 我有一个变量,它从XML文件中获取值。但是,可能会出现在xml中没有对该值的引用,并且此时XSL变量将返回False/None(不确定)的情况。我想保持这样的条件,如果变量没有值,则使用默认值。 要如何实现?
根据问题所给的少量细节,您可以进行的最简单测试是:
<xsl:if test="$var">
...
</xsl:if>
如果你想要为else情况提供输出,你可以使用xsl:choose
:
<xsl:choose>
<xsl:when test="not($var)"> <!-- parameter has not been supplied -->
</xsl:when>
<xsl:otherwise> <!--parameter has been supplied --> </xsl:otherwise>
</xsl:choose>
第二个示例还将正确处理变量或参数未提供实际值的情况,即它等于空字符串。这是因为not('')
返回true
。test="$var != ''"
可能会更好一些。 - scunliffetest="$var"
仍将返回true。然而,如果您使用早期版本的XSL,则可能需要编写test="not($var = '')"
。 - Scott Baker您没有解释"无值"是什么意思。这里有一个通用解决方案:
not($v) and not(string($v))
如果$v
“没有值”,则该表达式评估为true()
。
两个条件都需要满足,因为一个字符串$v
被定义为'0'
具有一个值,但是not($v)
是true()
。
在XSLT 1.0中,如果“值”是节点集或标量(例如字符串、数字或布尔值),可以通过不同的方式实现默认值。
@Alejandro提供了一种获取默认值的方法,如果变量应该包含空的节点集。
如果变量应该包含标量,则以下表达式返回其值(如果它具有值)或(否则)所需的默认值:
concat($v, substring($default, 1 div (not($v) and not(string($v)))))
string-length
函数来检查变量 $reference
是否包含任何内容,例如。<xsl:choose>
<xsl:when test="string-length($reference) > 0">
<xsl:value-of select="$reference" />
</xsl:when>
<xsl:otherwise>
<xsl:text>some default value</xsl:text>
</xsl:otherwise>
</xsl:choose>
normalize-space
函数。test="$node-set"
。嗯,这取决于你要寻找什么类型的数据。如果变量没有值 使用默认值。怎么做呢?
$node-set-1|$node-set-2[not($node-set-1)]
我尝试了很多来自SO的解决方案,我的最后一个解决方案是从@dimitre-novatchev那里得到的,但有时候它也不起作用。最近我在随机谷歌搜索中发现了另一种解决方案,想与社区分享。
为了检查空变量值,我们可以声明一个空变量并将其值与测试条件进行比较。以下是代码片段:
<xsl:variable name="empty_string"/>
<xsl:if test="testVariableValue != $empty_string">
...
</xsl:if>
这里的testVariableValue保存了要测试空场景的新变量的值。 希望它能帮助测试空变量状态。