XSLT 变量不起作用
我有以下一段 XSLT 代码:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:variable name="condition">(coasts='Adriatic Sea')or(coasts='Mediterranean Sea')</xsl:variable>
<xsl:template match="cia">
<html>
<head></head>
<body>
<table border="1">
<tr>
<th>Country</th>
<th>Capital</th>
<th>Area</th>
<th>Population</th>
<th>Inflation rate</th>
</tr>
<xsl:for-each select="country">
<xsl:if test="{$condition}">
<tr>
<td>
<xsl:value-of select="@name"/>
</td>
<td>
<xsl:value-of select="@capital"/>
</td>
<td>
<xsl:value-of select="@total_area"/>
</td>
<td>
<xsl:value-of select="@population"/>
</td>
<td>
<xsl:value-of select="@inflation"/>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
如果将条件表达式直接放入 if 元素中,代码可以正常工作,但是,我的问题是,当我将相同的条件表达式分配给变量,然后在 if 元素中引用它时,它不会不工作。我做错了什么吗?这可能吗? 谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
存在多个问题:
中的括号是不必要的;使用使用以下
xsl:variable
构造:xsl:if
中有条件时,将相对于每个执行测试国家
。顶级变量的情况并非如此。变量的值是表达式的结果,而不是表达式本身。如果您坚持使用变量,请在循环内初始化它。请参阅以下样式表:
输入:
输出(仅第一个
国家/地区
通过测试):请注意,您实际上甚至不需要单独的条件;只需添加一个即可。最好首先只选择所需的元素。该循环产生相同的输出:
There are multiple problems:
<xsl:if test="{$condition}">
are unnecessary; use<xsl:if test="$condition">
Use the following
xsl:variable
construct:xsl:if
the test was performed relative to eachcountry
. This is not the case in a top-level variable. The value of the variable is the result of the expression, not the expression itself. If you insist on a variable, then initialize it inside the loop.See the following stylesheet:
Input:
Output (only the first
country
passes the test):Note that you don't really even need a separate condition; it's better to select just the desired elements in the first place. This loop produces the same output:
替换:
为
另外,添加这些模板:
您是否注意到
“神奇地“消失了?当然,该代码还可以进一步改进,但是您既没有提供要应用转换的 XML 文档的实例,也没有提供所需的输出。
Replace:
with
also, add these templates:
Did you note that the
<xsl:if>
"magically" disappeared?Of course, this code can be improved even further, but you haven't provided neither an instance of the XML document on which the transformation is to be applied, nor the desired output.