【问题标题】:Transformation from XML to JSON从 XML 到 JSON 的转换
【发布时间】:2017-10-26 11:21:32
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: json xml xslt transformation jsonml


    【解决方案1】:

    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。

    【讨论】:

      【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 2014-01-17
        • 1970-01-01
        • 2012-08-16
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-12
        相关资源
        最近更新 更多