为什么 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),将数字转换为指数表示法是正确的:
Rules
Nodes in the input tree are handled by applying the following rules,
recursively.
- 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 更新。
我的所有 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),将数字转换为指数表示法是正确的:
Rules
Nodes in the input tree are handled by applying the following rules, recursively.
- An element
$E
named number results in the output of the string result ofxs: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 更新。