我必须创建一个带有选择的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>
Run Code Online (Sandbox Code Playgroud)
后来在我的代码中,我做了一个xsl,如果:
<xsl:if test="$grid_position = 'inside'">
{...code...}
</xsl:if>
Run Code Online (Sandbox Code Playgroud)
问题是我的变量永远不会='内部',因为换行符和缩进.如何从变量中删除空格?我知道我可以disable-output-escaping="yes"在xsl:copy-of中使用它时将其删除,但它不适用于xsl:variable标记.那么如何删除那些空格和换行符呢?
Tom*_*lak 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>
Run Code Online (Sandbox Code Playgroud)
它允许您构建代码并同时控制空白.
实际上,您应该清除XSL中未包含的文本节点,<xsl:text>以避免将来出现这类错误(即代码重新格式化或稍后重新考虑).
对于简单的情况,例如在你的样本中,做Jim Garrison所建议的也是一种选择.
另外,测试元素的存在count()是多余的.选择它就足够了,因为空节点集的计算结果为false.
<xsl:when test="/Element">
Run Code Online (Sandbox Code Playgroud)
最简单的方法是不要将空格放在首位:
<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>
Run Code Online (Sandbox Code Playgroud)
其他答案中的策略都很好,实际上在可行的情况下比这个更好。但有时您无法控制(或者更难控制)变量中的内容。在这些情况下,您可以在测试变量时去掉周围的空间:
代替
<xsl:if test="$grid_position = 'inside'">
Run Code Online (Sandbox Code Playgroud)
使用
<xsl:if test="normalize-space($grid_position) = 'inside'">
Run Code Online (Sandbox Code Playgroud)
normalize-space()去除前导和尾随空白,并将其他重复空白折叠为单个空白。