在XML标记中使用XSL变量

时间:2011-09-06 12:33:24

标签: xslt

我有一个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>

但显然,这不起作用。有没有办法实现这个目标?

1 个答案:

答案 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>