连接中的XSLT多变量不是传播

时间:2013-04-24 09:59:08

标签: xml variables xslt

我定义的变量以字符串形式出现,而不是传播值。

来源

<?xml version="1.0"?>
<results>
    <result>
        <title_id>
            123456
        </title_id>
        <product_id>
            2
        </product_id>
        <track_id>
            5
        </track_id>
    </result>
</results>

XSL

<html xsl:version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns="http://www.w3.org/1999/xhtml">

 <body>
 <table border="1" cellpadding="4" cellspacing="0">
 <tr bgcolor="#fb0006" align="center">
  <td><b>Link</b></td>
</tr>

 <xsl:for-each select="//results/result">

 <xsl:variable name="titlevar" select="title_id" />
 <xsl:variable name="productvar" select="product_id" />
 <xsl:variable name="trackvar" select="track_id" />


 <tr>
  <td><a href="{concat('http://www.myaddress/', '$titlevar', '-', '$productvar', '/?', '$trackvar')}" target="_blank">link</a></td>
 </tr>

 </xsl:for-each>

 </table>
 </body>
 </html>

输出:http://www.myaddress/$titlevar-$productvar/?$trackvar我想要的是:http://www.myaddress/123456-5/?2。我尝试了各种方括号,撇号和语音标记。谁能明白为什么它不起作用?

2 个答案:

答案 0 :(得分:2)

变量引用周围不应有引号。另请注意使用normalize-space()

这有效:

<html xsl:version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns="http://www.w3.org/1999/xhtml">

  <body>
    <table border="1" cellpadding="4" cellspacing="0">
      <tr bgcolor="#fb0006" align="center">
    <td><b>Link</b></td>
      </tr>

      <xsl:for-each select="//results/result">

    <xsl:variable name="titlevar" select="normalize-space(title_id)" />
    <xsl:variable name="productvar" select="normalize-space(product_id)" />
    <xsl:variable name="trackvar" select="normalize-space(track_id)" />

    <tr>
      <td><a href="{concat('http://www.myaddress/', 
                    $titlevar, '-', $productvar, '/?', $trackvar)}" 
             target="_blank">link</a></td>
    </tr>

      </xsl:for-each>

    </table>
  </body>
</html>

答案 1 :(得分:0)

您需要删除变量周围的引号:

<tr>
 <td><a href="{concat('http://www.myaddress/', $titlevar, 
                      '-', $productvar, '/?', $trackvar)}" 
        target="_blank">link</a></td>
</tr>