2017-03-14 18 views
0

N個の項目を含む一連のリストを持つXMLがありますが、<xsl:variable>を使用して ノード値を取得できません。<xsl:value-of>は連結変数を使用して文字列を代わりに取得します

マイXSL

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="my_list"> 
     <xsl:param name="num_items" select="my_items" /> 
     <xsl:call-template name="loop_items"> 
      <xsl:with-param name="count" select="$num_items"/> 
     </xsl:call-template> 
    </xsl:template> 

    <xsl:template name="loop_items"> 
     <xsl:param name="count" select="1"/> 
     <xsl:variable name="varname" select="concat('item0',$count,'_val')"/> 
     <xsl:if test="$count > 0"> 
      <p>1- <xsl:value-of select='item01_val'/></p> 
      <p>2- <xsl:value-of select="concat('item0',$count,'_val')" /></p> 
      <p>3- <xsl:value-of select="$varname" /></p> 
      <xsl:call-template name="loop_items"> 
       <xsl:with-param name="count" select="$count - 1"/> 
      </xsl:call-template> 
     </xsl:if> 
    </xsl:template> 
</xsl:stylesheet> 

マイXML

<?xml version="1.0" encoding="UTF-8"?> 
<my_list> 
    <my_items>4</my_items> 
    <item01_val>lorem</item_01_val> 
    <item02_val>ipsum</item_02_val> 
    <item03_val>dolor</item_03_val> 
    <item04_val>sit</item_04_val> 
</my_list> 

結果は、私が予想:

1- lorem 
2- lorem 
3- lorem 
1- ipsum 
2- ipsum 
3- ipsum 
..... 

私は本当に持っているもの:

1-lorem 
2-item01_val 
3-item01_val 
1-ipsum 
2-item02_val 
3-item02_val 

ご覧のとおり、私はノード値の代わりに文字列を取得しています。
私は命令XSLT 1.0

+1

**再現可能な**例を投稿してください。あなたのXMLは整形式ではなく、 'loop_answers'という名前のテンプレートはありません。 –

答えて

2

を使用しています:

<xsl:value-of select="concat('item0',$count,'_val')" /> 

は、連結された部分文字列で構成される文字列を返します。 ではないは、化合物ストリングをXPath式と評価します。

あなたはのようなものを使用して対応する要素の値を得ることができる:

<xsl:template match="my_list"> 
    <xsl:for-each select="*[starts-with(name(), 'item')]"> 
     <p>1- <xsl:value-of select="." /></p> 
     <p>2- <xsl:value-of select="." /></p> 
     <p>3- <xsl:value-of select="." /></p> 
    </xsl:for-each> 
</xsl:template> 

行うこと:あなたが単に行わない理由は、あなたの期待される結果を考えると、私は思うものの

<xsl:value-of select="*[name() = concat('item0',$count,'_val')]" /> 

関連する問題