从XML转换为JSON

时间:2017-10-26 11:21:32

标签: json xml xslt transformation jsonml

是否有一种标准方法可以将输入XML文档转换为我选择的结构(方案)的输出XML文档,并使用我选择的结构(方案)?

如果是从输入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 个答案:

答案 0 :(得分:2)

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

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

它定义了一个XSLT函数,它将XML树作为输入,并生成一个字符串作为输出。查看源代码,基本方法是生成一个XML树,其中包含每个JSON对象,数组和值的节点,然后将模板应用于输出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>

答案 1 :(得分:2)

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。