为什么 xml-to-json 函数返回指数符号?

Why is xml-to-json function returning exponential notation?

我的所有 XSLT 在使用 xml-to-json() 函数时都能正常工作,除了这一部分,

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

哪个returns

"send_at":1.615842E9

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

"send_at":1615842000

XPath 3.1 (当前)

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

17.5.4 fn:xml-to-json

Rules

Nodes in the input tree are handled by applying the following rules, recursively.

  1. An element $E named number results in the output of the string result of xs: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 planned for XPath 4 的官方支持选项:2

number-formatter: Determines how numeric values should be formatted.

  • Type: (function(xs:string) as xs:string)?
  • Default: ()

1 感谢 Michael Kay 注意到此机制(并预见到它的需要(并已在 Saxon 10.5 中实施))。
2 感谢 Martin Honnen 注意到此 XPath 4 更新。