在我的xml中,position()= 3的列可以具有以下类型的值:
0.00 asg
0,34 dgfg
16.34 assfsf
334,77 sfsdf
所以基本上它有一个带有2位小数的浮点数,一个空格和一个字符串。我需要做的是:如果数字为0(所以0,0.00或0,00),则显示一个空单元格。如果它大于0,请不要更改任何内容。
这是我试过的:
<xsl:template match="cell[position()=3]" priority="7">
<xsl:param name="text" select="."/>
<xsl:variable name="newtext" select="concat(normalize-space($text), ' ')" />
<xsl:variable name="perValue" select="substring-before($newtext, ' ')" />
<xsl:variable name="perInt" select='format-number($perValue, "#")'/>
<id><xsl:value-of select="perInt" /></id>
<xsl:choose>
<xsl:when test="perInt='0'">
<td style="border:1px solid #d6d6d6;">
<div>
...
</div>
</td>
</xsl:when>
</xsl:choose>
</xsl:template>
但它不起作用。该列的值为0.00 sdfdf并显示。当值> 0时,它会起作用,显示正确的值。
答案 0 :(得分:1)
可能有一种更简单的方法可以解决这个问题,但要修复你的问题,你需要在调用变量时添加$
字符:
<xsl:value-of select="perInt" />
需要:
<xsl:value-of select="$perInt" />
和
<xsl:when test="perInt='0'">
应该是:
<xsl:when test="$perInt='0'">
另请注意,您的某些值使用小数点,有些则使用小数点逗号。希望你的真实投入不是这样。
如果输入值为“0.00 asg”,则输出应为“”(空 串)。如果输入中的数字大于0,则显示输入。
考虑以下输入:
<强> XML 强>
<root>
<input>0.00 asg</input>
<input>0.34 dgfg</input>
<input>-16.34 assfsf</input>
<input>334.77 sfsdf</input>
<input>334,77 sfsdf</input>
</root>
应用以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:apply-templates select="input"/>
</xsl:copy>
</xsl:template>
<xsl:template match="input">
<output>
<xsl:if test="number(substring-before(., ' '))">
<xsl:value-of select="." />
</xsl:if>
</output>
</xsl:template>
</xsl:stylesheet>
将生成结果:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<output/>
<output>0.34 dgfg</output>
<output>-16.34 assfsf</output>
<output>334.77 sfsdf</output>
<output/>
</root>
请注意<input>334,77 sfsdf</input>
的结果为空;因为number('334,77')
会返回Nan
。
如果您将第二个模板更改为:
<xsl:template match="input">
<output>
<xsl:if test="number(substring-before(., ' ')) > 0">
<xsl:value-of select="." />
</xsl:if>
</output>
</xsl:template>
然后结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<output/>
<output>0.34 dgfg</output>
<output/>
<output>334.77 sfsdf</output>
<output/>
</root>