Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XSLT 3.0,将XML转换为JSON_Json_Xml_Xslt - Fatal编程技术网

XSLT 3.0,将XML转换为JSON

XSLT 3.0,将XML转换为JSON,json,xml,xslt,Json,Xml,Xslt,我有一个XML和一个XSLT。 转换目前运行得很好 如何扩展此XSLT以获得JSON结果 它甚至可以是一个单独的XSTL,用于将第一个XSLT的XML结果转换为JSON。 然后,我会用Java将两者链接在一起 如有任何建议,将不胜感激 提前谢谢 托马斯 XMLs(原始和转换后): XSLT 3.0: 有三种方法可以做到这一点 (1) 您可以使用json的XML模型构造XML文档,然后使用XML-to-json()对其进行格式化。例如,要构造输出{“a”:1,“b”:2},首先要构造XML文档

我有一个XML和一个XSLT。 转换目前运行得很好

如何扩展此XSLT以获得JSON结果

它甚至可以是一个单独的XSTL,用于将第一个XSLT的XML结果转换为JSON。 然后,我会用Java将两者链接在一起

如有任何建议,将不胜感激

提前谢谢 托马斯

XMLs(原始和转换后):

XSLT 3.0:
有三种方法可以做到这一点

(1) 您可以使用json的XML模型构造XML文档,然后使用XML-to-json()对其进行格式化。例如,要构造输出{“a”:1,“b”:2},首先要构造XML文档

<fn:map>
  <fn:number key="a">1</fn:number>
  <fn:number key="b">2</fn:number>
</fn:map>

1.
2.
这使您能够创建具有精确控制的任何JSON输出

(2) 您可以构建一个由映射和数组组成的数据结构,然后使用JSON输出方法对其进行序列化。例如,您可以构造:

<xsl:map>
  <xsl:map-entry key="'a'" select="1"/>
  <xsl:map-entry key="'b'" select="2"/>
</xsl:map>

(3) 您可以使用文本输出方法“手工”编写JSON


选择哪一种取决于数据来自何处。

有很多方法可以将特定的XML文档表示为JSON,因此简单地告诉我们需要JSON输出确实可以解释需求。XSLT 3.0支持将特定的XML格式转换为JSON,因此如果要使用内置支持,则需要将当前XML格式转换为
XML-to-JSON
函数所期望的格式。您好,Martin,再次感谢您上次的支持和当前的评论。事实上,我必须转换XML1,你知道,用类似这样的方式(XML2):经过一些处理步骤后,JSON文件应该转换回原始XML格式(XML1):我希望Jackson能像king Michael Jackson(RIP)那样完成这项工作。我可以开发很好的Java应用程序,但XSLT对我来说是一个超现实的世界!提前感谢您的建议。汤玛希·迈克尔,非常感谢你的回答。我希望有一种更简单的方法来实现这一点,因为必须转换的真实XML可能有{200、201、500、…}类型的记录,而不是这里映射表中定义的记录:
这些特殊的自定义记录应该转换为JSON,然后再转换回来,而不做任何更改。我不知道那些定制记录的内部结构。我应该只知道外壳,更准确地说,类似于以下记录:
我使用Jackson在Java级别进行转换。结果是一个JSON,其中属性显示为元素,而不是其他值的属性。对于这个星球上的开发者来说,这似乎是艰难的一天:-)再次感谢ThomasHi Michael,你是对的!我不得不再强调一点问题中自定义元素的存在。很抱歉没有这些细节。我试着把任务分成更小的部分。