XSL:format-number中的撇号是什么意思?

3
我使用XSLT解析XML文件,得到了一个XML结果。我需要对数字进行格式化,使用撇号作为千位、百万位等分隔符。例如:1234567 = 1'234'567。现在的问题是如何将这些撇号添加到数字中。
<xsl:value-of select="format-number(/path/to/number, '###'###'###'###')" />

这不起作用是因为撇号本身已经限定了格式的开始位置。

是否有简单的解决方案(例如像C#中那样转义撇号)?

2个回答

2
答案取决于您使用的是1.0还是2.0版本。
在2.0版本中,您可以通过将字符串分隔符加倍来转义它(例如 'it''s dark'),并且您可以通过使用XML实体(如 " )来转义属性分隔符。因此,您可以编写以下内容:
<xsl:value-of select="format-number(/path/to/number, '###''###''###''###')" />

在1.0版本中,您可以使用XML实体来转义属性分隔符,但是没有办法转义字符串分隔符。因此,您可以切换分隔符并使用。
<xsl:value-of select='format-number(/path/to/number, "###&apos;###&apos;###&apos;###")' />

另一种方式 - 可能更容易的方式 - 是将字符串放入变量中:
<xsl:variable name="picture">###'###'###'###</xsl:variable>
<xsl:value-of select="format-number(/path/to/number, $picture)" />

谢谢,但是没有什么起作用...不过我会发布我们找到的解决方案。 - domueni
1
说“什么都没用”是非常没有建设性的,这意味着我的所有解决方案都没有起作用。如果它们没有起作用,那么要么你实现它们时出了问题,要么你正在使用有缺陷的处理器。阅读此内容的人会想知道哪一个是原因。请说明你做了什么以及遇到了什么错误。 - Michael Kay
好的,我在这个网站上:http://xslttest.appspot.com/ 重试了你提供的所有解决方案。但是仍然没有一个可行的解决方案。我收到了错误信息:“Error: format-number picture: Passive character must not appear between active characters in a sub-picture.” - domueni
这意味着您没有xsl:decimal-format声明。抱歉,我忘了提到这一点 - 我有点假设您已经解决了那部分。 - Michael Kay

1
经过一些研究,我们得出了这个解决方案:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:decimal-format name='ch' grouping-separator="'" />
     <xsl:template match="/">
     <xsl:value-of select='format-number(/the/path/of/the/number, "###&apos;###&apos;###", "ch")'/>
     ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接