1

我所有的 XSLT 在使用该xml-to-json()功能时都在工作,除了这部分,

<number key="send_at">
    <xsl:text>1615842000</xsl:text>
</number>

返回

"send_at":1.615842E9

当我打算得到这个结果时:

"send_at":1615842000
4

1 回答 1

3

XPath 3.1 (当前)

根据规范(XPath 和 XQuery Functions and Operators 3.1)将数字转换为指数表示法是正确的:

17.5.4 fn:xml 到 json

规则

输入树中的节点通过递归应用以下规则来处理。

  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}}

XPath 4 (即将推出)

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 更新。

于 2021-04-15T00:10:04.513 回答