我正在创建一个报告,通过使用XSL将XML文件转换为HTML文件。在某些情况下,我有一个始终为空的列。我的问题是,无论我设置这个列有多窄,它总是太宽(通常,当有一些文本时它是一个或两个字母,在这种情况下,列将同样宽容纳最大的弦,比它空的时候窄3-4倍。当我没有数据时,有没有办法让这个专栏非常狭窄? 这是创建HTML文件的XSL代码的一部分(将空值放在&#34下面的代码;用& nbsp&#34替换空元素;)。对于width属性,我尝试了不同的值,无论我输入什么值,当该列为空时,列的宽度相同(在Excel中打开时太宽): " FONT-WEIGHT:大胆
<xsl:choose>
**<!-- replace empty element with -->
**<xsl:when test="string-length()= 0">
<xsl:attribute name="width">20px</xsl:attribute>
<xsl:text disable-output-escaping="yes">&</xsl:text>
<xsl:text>nbsp;</xsl:text>**
</xsl:when>**
<xsl:when test="contains(name(.), 'Location')">
<xsl:attribute name="align">left</xsl:attribute>
<xsl:attribute name="colspan">2</xsl:attribute>
<xsl:apply-templates/>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="align">left</xsl:attribute>
<xsl:apply-templates/>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
谢谢。
答案 0 :(得分:0)
除非您对这些元素使用xsl:strip-space
,否则string-length()
也会计算空格。
尝试将测试更改为:
test="string-length(normalize-space())=0"
您也可以将其更改为:
test="not(boolean(normalize-space()))"
我认为更容易理解。
您还可以使用小数(或十六进制)引用作为非中断空格( 
);这将消除2 xsl:text
和disable-output-escaping
的需要。
您还可以使用零宽度空间:​
。
以下是我将其展示的示例:
<xsl:when test="not(boolean(normalize-space()))">
<xsl:text>​</xsl:text>
</xsl:when>