我使用XSLT3.0的xslt ()函数使用Saxon9.8HE将xml转换为json。我得到的问题是,我的数字值被转换成指数(科学符号)。我希望输出与我在输入xml中传递的输出相同。
Xslt篡改链接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>请注意,使用XSLT3.0的json-to- xml ()函数对此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 }
}关于这件事的任何解决办法/建议对我都有很大的帮助。
发布于 2018-04-23 12:31:09
结果如https://www.w3.org/TR/xpath-functions/#func-xml-to-json中所指定的那样
一个名为number的元素$E将输出xs: string (xs:double(fn:string($E))的字符串结果)。
在其他XPath/XQuery3.1实现或XSLT3.0实现中,您将得到相同的结果。
因此,除非您愿意将<number key="price">1234567</number>更改为<string key="price">1234567</string> (当然可以通过中间转换步骤来完成),否则我认为您不能用xml-to-json来阻止大数的指数数字格式。
https://stackoverflow.com/questions/49966887
复制相似问题