如何停止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.

的数字