3

是否有一种标准方法可以将具有我选择的结构(方案)的输入 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。

所有三个选项都有一些“如果有”。我想知道是否真的有一些技术可以实现这一目标。

谢谢。

4

2 回答 2

4

XSLT 3 支持将任何 XML 转换为在https://www.w3.org/TR/xslt-30/#schema-for-json中定义的 JSON 的 XML 表示,然后允许您使用https://www。 w3.org/TR/xslt-30/#func-xml-to-json将特定的 XML 转换为 JSON。

于 2017-10-26T11:48:08.163 回答
2

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

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

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

例如,为了输出一个 JSON 数组,它首先生成一个 XML 节点<json:array>...</json:array>,然后应用这个模板:

  <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>
于 2017-10-26T11:33:24.713 回答