我正在使用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与我正在尝试做的事情无关。只是尝试如上所述转换名称值对,而不进行硬编码。
答案 0 :(得分:1)
假设您的代码段的上下文是与具有所述属性的元素匹配的模板。 @Tomalak已经提到了它的要点:
<xsl:for-each select="@*">
<xsl:text>{ "</xsl:text>
<xsl:value-of select="name()"/>
<xsl:text>" : "</xsl:text>
<xsl:value-of select="."/>
<xsl:text>", }</xsl:text>
</xsl:for-each>
(未进行测试,因为您没有显示完整的样式表。)
始终通过将文本内容放在xsl:text
元素中来控制空白序列化。如前所述,如果您对检索属性名称和值对的一般想法感兴趣,这很好 - 但如果您想输出实际的JSON,则不一定。