2009-03-18 13 views
0

こんにちは、私はXMLノードの特定の属性に一致すると奇妙な問題があります。仕事をdoesntの 例コード:XSLT foreach

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

最初の例では、私はいくつかの変数名を置き換える場合は、次の作業を行いますが、私はあまりこの方法を好きではない

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

サンプルコード 私はまた、どの変数名が選択されているのかをテストしましたが、その中に正しいデータがあります(したがって、 'A'、B '、' C '...)

誰でもこの問題がありました前?

tnx

+0

あなたのために説明した動作を生成XMLスニペットを投稿してください。 – Tomalak

+0

XSLTにはどのような言語とフレームワークが使用されていますか?これがブラウザで行われていますか? – Eddie

+0

$ period_name変数はどのように設定されていますか? – Stobor

答えて

0

これまでに見たことがありません。あいまいな@name属性である可能性があります。したがって、以下のようにアクセスしてみてください。

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

それ以外は、申し訳ありませんが、完全に両方の方法で動作するように見えます。

3

foreachの代わりにapply-templatesに変更してみてください。以下のようなものが動作するはずです。

<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]" />