none
如何將變數與字串相加 RRS feed

  • 問題

  • 各位前輩您好:

    晚輩在這想請教各位前輩一個小問題。

    問題描述:

    在XSLT裡我有跑一個迴圈,變數為i,
    在XML裡,我的tag為<test_1></test_1>、<test_2></test_2>、<test_3></test_3>等等
    我希望在XSLT裡判斷某個tag是否存在,
    <xsl:if test="???????" >
      <tr><td>OK</td></tr>
    </xsl:if>
    但是我確不會組test裡的值。
    可以請該怎麼組起來嗎? 

    我有試過
    test="test_&i"
    test="test_+&i"
    test="test_+i"

    等等,但都失敗,請前輩解惑,非常謝謝。

    各位前輩,我用test="concat('test_', $i)"是可以的。
    但如果我要將此欄位的值印出,似乎是不行的。

    我用→<tr><td><xsl:value-of select="concat('test_',$i)"/></td></tr>
    <tr><td><xsl:value-of select="concat('dd_',$i)"/></td></tr>
    執行後,頁面上會出現【test_1】,卻不會出現此結點的值。

    請問我該如何做,才可以取出其值?

    非常感謝。

    2009年7月27日 上午 04:47

解答

  • 我測試用的xml長這樣:

    <test>
      <test_1>A</test_1>
      <test_2>B</test_2>
      <test_3>C</test_3>
    </test>
    因為不知道你完整的xsl, 所以我僅做簡單的測試:用一個i去模擬你說的變數(設定為2), 再用tag的名稱去select特定的node
    <xsl:template match="/test">
      <xsl:variable name="i">2</xsl:variable>
      <html>
      <body>
      <table border="1"> 	
        <xsl:if test="concat('test_', $i)" >
          <tr>
            <td>
              <xsl:value-of select="./*[substring-before(name(),'_')='test' and substring-after(name(),'_')=$i]"/>
            </td>
          </tr>
        </xsl:if>    
      </table>
      </body>
      </html>
    </xsl:template>
    
    • 已標示為解答 Lolota Lee 2009年8月3日 上午 06:07
    2009年7月28日 上午 08:31

所有回覆

  • concat('dd_', $i) 會回傳運算結果,當然不會出現你要的值...

    我沒試過不知道 XPath 的一些路徑是不是一定要是常數,你可以試看看,例如:decendant-or-self::concat('dd_', $i),如果不行就表示一定要常數,這樣就會比較麻煩,可能要由前端程式做比較好。
    小人物一枚。
    2009年7月27日 上午 07:27
    版主
  • 我測試用的xml長這樣:

    <test>
      <test_1>A</test_1>
      <test_2>B</test_2>
      <test_3>C</test_3>
    </test>
    因為不知道你完整的xsl, 所以我僅做簡單的測試:用一個i去模擬你說的變數(設定為2), 再用tag的名稱去select特定的node
    <xsl:template match="/test">
      <xsl:variable name="i">2</xsl:variable>
      <html>
      <body>
      <table border="1"> 	
        <xsl:if test="concat('test_', $i)" >
          <tr>
            <td>
              <xsl:value-of select="./*[substring-before(name(),'_')='test' and substring-after(name(),'_')=$i]"/>
            </td>
          </tr>
        </xsl:if>    
      </table>
      </body>
      </html>
    </xsl:template>
    
    • 已標示為解答 Lolota Lee 2009年8月3日 上午 06:07
    2009年7月28日 上午 08:31