【问题标题】:xslt array problemxslt数组问题
【发布时间】:2011-09-12 11:54:57
【问题描述】:

我正在使用 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"
            }
        ]
    }
}

谢谢

【问题讨论】:

  • 提供输入 XML 和所需的输出。

标签: xml json xslt


【解决方案1】:

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

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

【讨论】:

  • 我明白这一点,但在这种情况下,我总是希望将特定元素映射为数组。在上面的示例中,子元素的子元素。
  • 谢谢,我需要了解它。解决方案是在 xml 中创建一个属性来推断一个数组。
猜你喜欢
  • 1970-01-01
  • 2011-03-31
  • 2011-09-21
  • 1970-01-01
  • 2011-09-15
  • 2010-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
相关资源
最近更新 更多