我定义的变量以字符串形式出现,而不是传播值。
来源
<?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
。我尝试了各种方括号,撇号和语音标记。谁能明白为什么它不起作用?
答案 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>