微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 xml-to-json 函数返回指数表示法?

如何解决为什么 xml-to-json 函数返回指数表示法?

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

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

哪个返回

"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

规则

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

  1. 一个名为 number 的元素 $E 导致输出 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:确定数值的格式。

  • 输入(function(xs:string) as xs:string)?
  • 默认()

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。