我正在使用Saxon 9.8 HE使用xslt 3.0的xml-to-json()函数将xml转换为json。我得到的问题是我的数字值被转换为指数(科学记数法)。我想输出与输入xml中传递的相同。
xsltfiddle链接 https://xsltfiddle.liberty-development.net/94hvTyT
<?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()函数生成的
<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 }
}
任何解决方案/建议都对我有很大的帮助。
答案 0 :(得分:3)
结果如https://www.w3.org/TR/xpath-functions/#func-xml-to-json中所述
$ E命名数字元素导致字符串结果的输出 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
。