我必须创建一个带有选择的XSL变量。如下所示:
<xsl:variable name="grid_position">
<xsl:choose>
<xsl:when test="count(/Element) >= 1">
inside
</xsl:when>
<xsl:otherwise>
outside
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
后来在我的代码中,我做了一个xsl if:
<xsl:if test="$grid_position = 'inside'">
{...code...}
</xsl:if>
问题是因为换行和缩进,我的变量永远不会='内'。如何从变量中删除空格?我知道当我在xsl:copy-of中使用它时,我可以使用disable-output-escaping="yes"
将其删除,但它不适用于xsl:variable标记。那么如何删除那些空格和换行符?
答案 0 :(得分:16)
这就是<xsl:text>
的用途:
<xsl:variable name="grid_position">
<xsl:choose>
<xsl:when test="count(/Element) >= 1">
<xsl:text>inside</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>outside</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
它允许您同时构建代码和控制空白。
实际上,您应该清楚XSL中未包含在<xsl:text>
中的文本节点,以避免将来出现这些类型的错误(即代码重新格式化或稍后重新考虑)
对于简单的情况,例如样本,what Jim Garrison suggests也可以选择。
顺便说一下,测试count()
元素的存在是多余的。选择它就足够了,因为空节点集的计算结果为false
。
<xsl:when test="/Element">
答案 1 :(得分:4)
最简单的方法是不要将空格放在那里:
<xsl:variable name="grid_position">
<xsl:choose>
<xsl:when test="count(/Element) >= 1">inside</xsl:when>
<xsl:otherwise>outside</xsl:otherwise>
</xsl:choose>
</xsl:variable>
答案 2 :(得分:2)
其他答案中的策略是好的,实际上在可行的情况下比这个更好。但是有些时候你无法控制(或者更难控制)变量中的内容。在这些情况下,您可以在测试变量时剥离周围的空间:
而不是
<xsl:if test="$grid_position = 'inside'">
使用
<xsl:if test="normalize-space($grid_position) = 'inside'">
normalize-space()
剥离前导和尾随空格,并将其他重复的空格折叠为单个空格。
答案 3 :(得分:1)
只需使用:
<xsl:variable name="grid_position" select=
"concat(substring('inside', 1 div boolean(/Element)),
substring('outside', 1 div not(/Element))
)
"/>