从 XML 到 JSON 的转变

Transformation from XML to JSON

是否有一种标准方法可以将具有我选择的结构(方案)的输入 XML 文档转换为具有我选择的结构(方案)的输出 JSON 对象?

如果是输入XML到输出XML的转换,我会用XSLT。

我可以想象以下三种方法:

  1. 从XML到JSON的直接转换,即描述转换XML->JSON的一种方式,就像XSLT描述转换XML -> XML.

  2. 我知道 JSONML。它是任意 XML 文档的无损 JSON 表示。但是,生成的 JSON 对象没有我选择的结构。如果有一些标准的方法来描述转换 JSON -> JSON,我会链接 XML -> JSONML 和 JSONML -> JSON.

  3. 如果有与JSONML相反的东西(我们称它为"XMLSON",即任意JSON对象的无损XML符号) ,我会链接 XML -> XMLSON(通过 XSLT)和 XMLSON -> JSON.

三个选项都有一些"if there were"。不知是否真的有什么技术可以达到目的

谢谢。

XSLT 的输出不需要是 XML,所以如果您习惯使用它,您可以继续使用它来输出 JSON。

快速搜索显示了这个,这可能是您开始的一个很好的例子:https://github.com/bramstein/xsltjson

它定义了一个 XSLT 函数,该函数将 XML 树作为输入,并生成一个字符串作为输出。查看源代码,基本方法是为每个 JSON 对象、数组和值生成一个包含节点的 XML 树,然后将模板应用于输出 JSON 语法本身的模板.

比如输出一个JSON数组,首先生成<json:array>...</json:array>的XML节点,然后套用这个模板:

  <xsl:template match="json:array" mode="json">
    <xsl:variable name="values">
      <xsl:apply-templates mode="json"/>
    </xsl:variable>
    <xsl:text/>[<xsl:text/>
      <xsl:value-of select="string-join($values/value,',')"/>
    <xsl:text/>]<xsl:text/>
  </xsl:template>

XSLT 3 支持将任何 XML 转换为 https://www.w3.org/TR/xslt-30/#schema-for-json and then allows you to use https://www.w3.org/TR/xslt-30/#func-xml-to-json 中定义的 JSON 的 XML 表示,以将特定的 XML 转换为 JSON.