xslt数组问题

时间:2011-09-12 11:54:58

标签: xml json xslt

我正在使用xslt将xml转换为json。 我遇到的问题是:如果特定的xml元素没有兄弟姐妹,它不会作为数组返回。

        <xsl:if test="count(preceding-sibling::*[name() = name(current())]) = 0">
        <xsl:text>"</xsl:text><xsl:value-of select="name()" /><xsl:text>":</xsl:text>
        <xsl:if test="count(following-sibling::*[name() = name(current())]) &gt; 0">
            <xsl:text>[</xsl:text>
        </xsl:if>
    </xsl:if>

我想要的是如果父级的兄弟姐妹拥有与数组相同的元素,那么这个元素也必须是一个数组。

所以我想要的是:

<element>
 <child_element>
  <grandchild_element>
     only one
  </grandchild_element>
 </child_element>
 <child_element>
  <grandchild_element>
     one
  </grandchild_element>
  <grandchild_element>
     two
  </grandchild_element>
 </child_element>

我想要以下输出

{
    "element": {
        "child-element": [
            {
                "grandchild_element": "only one"
            }
        ],
        "child-element": [
            {
                "grandchild_element": "one" ,
                "grandchild_element": "two"
            }
        ]
    }
}

感谢

1 个答案:

答案 0 :(得分:2)

已经有很多尝试来定义XML和JSON之间的映射,这不是一个小问题。我建议在尝试对此转换进行编码之前,先研究一些现有的建议映射,如果要进行不同的映射,请在开始编码之前仔细指定。

您要遇到的一个问题是,如果您在不了解架构的情况下尝试执行此操作,您会发现很难知道何时输出单个JSON对象以及何时输出单个成员数组。例如,如果某人有一个电话号码,您将输出一个值,但如果他们有多个,您将输出一个数组:您无法知道何时看到一个电话号码,收件人是否期望一个数组电话号码。这不是一个编码问题,这是一个问题,XML实例中没有足够的信息来区分。