如何停止xslt3.0的xml-to-json()函数将数字转换为指数表示法
How to stop xml-to-json() function of xslt3.0 to convert number to exponent notation
我正在使用 Saxon 9.8 HE 使用 xslt 3.0 的 xml-to-json() 函数将 xml 转换为 json。我遇到的问题是我的 Number 值正在转换为指数(科学记数法)。我希望输出与我传入的输入相同 xml.
xsltfiddle link
https://xsltfiddle.liberty-development.net/94hvTyT
输入xml
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<map key="Request">
<number key="price">1234567</number>
</map>
</map>
请注意,此 xml 也是使用 xslt 3.0
的 json-to-xml() 函数生成的
XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="xml-to-json(., map { 'indent' : true() })"/>
</xsl:template>
</xsl:stylesheet>
输出
{ "Request" :
{ "price" : 1.234567E6 }
}
期望的输出
{ "Request" :
{ "price" : 1234567 }
}
任何solution/suggestions对我来说都会有很大的帮助。
结果如 https://www.w3.org/TR/xpath-functions/#func-xml-to-json 中指定的那样
An element $E named number results in the output of the string result
of xs:string(xs:double(fn:string($E)))
您将获得与其他 XPath/XQuery 3.1 实现或 XSLT 3.0 实现相同的结果。
因此,除非您愿意将 <number key="price">1234567</number>
更改为 <string key="price">1234567</string>
(当然可以通过中间转换步骤完成),我认为您无法阻止大的指数格式xml-to-json
.
的数字
我正在使用 Saxon 9.8 HE 使用 xslt 3.0 的 xml-to-json() 函数将 xml 转换为 json。我遇到的问题是我的 Number 值正在转换为指数(科学记数法)。我希望输出与我传入的输入相同 xml.
xsltfiddle link https://xsltfiddle.liberty-development.net/94hvTyT
输入xml
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<map key="Request">
<number key="price">1234567</number>
</map>
</map>
请注意,此 xml 也是使用 xslt 3.0
的 json-to-xml() 函数生成的XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select="xml-to-json(., map { 'indent' : true() })"/>
</xsl:template>
</xsl:stylesheet>
输出
{ "Request" :
{ "price" : 1.234567E6 }
}
期望的输出
{ "Request" :
{ "price" : 1234567 }
}
任何solution/suggestions对我来说都会有很大的帮助。
结果如 https://www.w3.org/TR/xpath-functions/#func-xml-to-json 中指定的那样
An element $E named number results in the output of the string result of xs:string(xs:double(fn:string($E)))
您将获得与其他 XPath/XQuery 3.1 实现或 XSLT 3.0 实现相同的结果。
因此,除非您愿意将 <number key="price">1234567</number>
更改为 <string key="price">1234567</string>
(当然可以通过中间转换步骤完成),我认为您无法阻止大的指数格式xml-to-json
.