我所有的 XSLT 在使用该xml-to-json()
功能时都在工作,除了这部分,
<number key="send_at">
<xsl:text>1615842000</xsl:text>
</number>
返回
"send_at":1.615842E9
当我打算得到这个结果时:
"send_at":1615842000
我所有的 XSLT 在使用该xml-to-json()
功能时都在工作,除了这部分,
<number key="send_at">
<xsl:text>1615842000</xsl:text>
</number>
返回
"send_at":1.615842E9
当我打算得到这个结果时:
"send_at":1615842000
根据规范(XPath 和 XQuery Functions and Operators 3.1)将数字转换为指数表示法是正确的:
规则
输入树中的节点通过递归应用以下规则来处理。
- 一个名为 number 的元素
$E
导致输出字符串 resultxs:string(xs:double(fn:string($E)))
该fn:xml-to-json
函数确实允许一个$options
参数,它为依赖于实现的扩展提供了一种方法。Saxon 10.5 已经利用这种机制来支持传递值,而不考虑 JSON 有效性:1
map{'number-formatter':function($x){$x}}
fn:xml-to-json
格式化程序是为 XPath 4 计划的官方支持的选项:2
number-formatter
: 确定数值的格式。
- 类型:
(function(xs:string) as xs:string)?
- 默认:
()
1感谢 Michael Kay 注意到这个机制(并预见到它的需要(并且已经在 Saxon 10.5 中实现它))。
2感谢 Martin Honnen 注意到此 XPath 4 更新。