我需要将值格式化为特定的格式,但它似乎不受支持。
我想使用:
format-number($value, '####,##,##,##0')
但尝试此操作时返回的值是'###,###,##0'
所以如果我$value = '123456789'
,我想把值输出为1,24,56,789
,但我得到的是123,456,789
。
你能做的格式化有限制吗?
如果您转到W3schools并输入以下xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>123456789</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>123456789</price>
<year>1988</year>
</cd>
</catalog>
然后是以下xsl:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="TestFormat" select="'###,##,##,##0'"/>
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="format-number(price, $TestFormat)"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
你可以看到我没有得到想要的格式。有什么建议吗?
提前感谢您的帮助。
对于8个和9个字符的字符串,以下操作有效:
<td>
<xsl:value-of select="substring(price,1,1)"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="substring(price,2,1)"/>
<xsl:value-of select="substring(price,4,1)"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="substring(price,5,2)"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="substring(price,7,3)"/>
<xsl:if test="string-length(price) < 9">
<xsl:value-of select="0"/>
</xsl:if>
</td>
根据您的意图,可能需要移动或更改"if"块以实现略有不同的格式。
现在是时候转向XSLT2.0了。在Saxon的当前版本中,您的代码会产生以下输出:
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>Empire Burlesque</td>
<td>12,34,56,789</td>
</tr>
<tr>
<td>Hide your heart</td>
<td>12,34,56,789</td>
</tr>
</table>
</body>
</html>
分组分隔符,
仅在小数分隔符后第一次出现时才受到尊重。这是因为W3C指定格式模式字符串采用JDK 1.1 DecimalFormat类指定的语法查看该类会发现它具有整数分组大小属性,因此整个格式中的可变组大小不能由该类建模。
因此,当写入###,##,##,##0
时,分组大小被设置为三(最右边的分组分隔符,
和格式字符串末尾之间的位数,而当写入###,##,##,0
时,每个数字之间将有一个分组分隔符。
如果真的、真的想在没有任何外部格式化工具/函数的情况下在XSLT中实现这一点,那么您可能可以使用string-length
、concat
和substring
函数并手动插入组分隔符。
更新:这些语句仅对XSLT1.0有效。