使用XSLT将XML属性转换为名称值对

时间:2014-10-25 10:17:08

标签: xml xslt

我正在使用XSLT转换XML。

我目前正在对每个属性名称进行硬编码,如下所示:

    <xsl:for-each select="variable">
    {
         "name" : "<xsl:value-of select="@name" />",
         "value" : "<xsl:value-of select="@value" />"
    }
    </xsl:for-each>

但这似乎非常混乱。有没有办法从属性动态创建键值对,而无需单独对每个属性名称进行硬编码?即上面我已经指定:

"name" : "<xsl:value-of select="@name" />"

有没有办法改变它,所以我只是在循环中使用一些变量,所以它就像:

(pseudocode:)

        <for each attribute in my element>
        {
             "attribute.name" : "attribute.value",
        }
        </xsl:for-each>

编辑:编辑了这个问题,所以JSON与我正在尝试做的事情无关。只是尝试如上所述转换名称值对,而不进行硬编码。

1 个答案:

答案 0 :(得分:1)

假设您的代码段的上下文是与具有所述属性的元素匹配的模板。 @Tomalak已经提到了它的要点:

<xsl:for-each select="@*">
  <xsl:text>{&#10;"</xsl:text>
  <xsl:value-of select="name()"/>
  <xsl:text>" : "</xsl:text>
  <xsl:value-of select="."/>
  <xsl:text>",&#10;}</xsl:text>
</xsl:for-each>

(未进行测试,因为您没有显示完整的样式表。)

始终通过将文本内容放在xsl:text元素中来控制空白序列化。如前所述,如果您对检索属性名称和值对的一般想法感兴趣,这很好 - 但如果您想输出实际的JSON,则不一定。

相关问题