2013-04-24 68 views
1

我定義的變量是作爲字符串傳遞的,而不是傳播值。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

圍繞變量引用應該沒有引號。還請注意使用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

謝謝!我感覺有點愚蠢。 – 2013-04-24 10:24:03

0

您需要刪除圍繞變量引號:

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