我有一个XML文件,我想转换为XML。我需要动态设置XML标签的名称参数,所以它会是这样的:
<VALUE name="$varname"><xsl:value-of select="@value"/></VALUE>
我有这样的事情:
<xsl:for-each select="PRODTABLE/PRODTR">
<xsl:variable name="varname">
<xsl:copy-of select="PRODTD/PRAT/@name"/>
</xsl:variable>
<VALUE name="$varname">
<xsl:value-of select="PRODTD/PRAT/VALUE"/>
</VALUE>
</xsl:for-each>
但显然,这不起作用。有没有办法实现这个目标?
答案 0 :(得分:3)
这是常见问题解答。
快速回答:指定为name="$varname"
的属性值实际上是字符串“$ varname”。
XSLT生成具有动态计算值的属性的方法是使用AVT( Attribute Value Template )或 <xsl:attribute>
指令
<强>解决方案强>:
使用强>:
<VALUE name="{$varname}">
您的代码可能会以较短的方式重写:
而不是:
<xsl:for-each select="PRODTABLE/PRODTR">
<xsl:variable name="varname">
<xsl:copy-of select="PRODTD/PRAT/@name"/>
</xsl:variable>
<VALUE name="$varname">
<xsl:value-of select="PRODTD/PRAT/VALUE"/>
</VALUE>
</xsl:for-each>
使用:
<xsl:for-each select="PRODTABLE/PRODTR">
<VALUE name="{PRODTD/PRAT/@name}">
<xsl:value-of select="PRODTD/PRAT/VALUE"/>
</VALUE>
</xsl:for-each>