XSLT foreach

时间:2009-03-18 12:38:11

标签: xslt

我有一个奇怪的问题,匹配xml节点的特定属性。 示例代码不起作用:

<xsl:for-each select="../../unit/service/price/season[@name=$period_name]">
     <xsl:attribute name="std_bed_price">
          <xsl:value-of select="../@amount"/>
     </xsl:attribute>
</xsl:for-each>

可行的示例代码,但我不太喜欢这种方式:

 <xsl:for-each select="../../unit/service/price/season">
     <xsl:if test="@name = $period_name">
          <xsl:attribute name="std_bed_price">
               <xsl:value-of select="../@amount"/>
          </xsl:attribute>
     </xsl:if>
 </xsl:for-each>

如果在第一个例子中我用一些像'A'这样的值替换变量名,它可以工作, 我还测试了选择了什么变量名称,并且里面有正确的数据(所以'A','B','C'......)

以前有人遇到过这个问题吗?

TNX

2 个答案:

答案 0 :(得分:3)

您可以尝试将其更改为apply-templates而不是foreach。以下内容应该有效。

<xsl:template match="price">
    <xsl:attribute name="std_bed_price">
        <xsl:value-of select="@amount" />
    </xsl:attribute>
</xsl:template>

然后称之为:

<xsl:apply-template select="../../unit/service/price/[season/@name=$period_name]" />

答案 1 :(得分:0)

之前没见过。它可能是一个模糊的@name属性。因此,请尝试像下面一样访问它?

select="../../unit/service/price/season[./@name=$period_name]

除此之外,对不起,对我来说,它看起来应该完全兼顾。