我在XML文档中有以下集合:
<events>
<event>
<type>Downloaded</type>
<result>Sucess</result>
</event>
<event>
<type>Processed</type>
<result>Sucess</result>
</event>
</events>
现在在我的XSLT中我有一个带TD的表 - 我希望这个TD的值代表事件的状态。如果事件存在已处理且结果为真,那么我希望此TD的值被处理,同样,如果处理不存在,那么如果下载存在且状态成功,那么我希望TD的值为下载...
不要指望完整的代码,只是关于如何向XSLT添加一些编程逻辑的示例。
我真正需要检查的是......
元素事件是否存在type =“已处理”....如果不是......那么......我会把剩下的事情搞清楚......
答案 0 :(得分:1)
您可以使用<xsl:if>
还可以使用带有<xsl:choose>
的switch语句,其中包括执行'else'行为的功能。
这些构造采用test属性,您可以在其中指定条件。 Here's关于有用的入门测试的一篇很好的文章。
这是你必须要习惯的东西,但这些网站链接会给你一个很好的开始。
示例:为您的文档提供如下模板:
<xsl:template match="/">
<xsl:for-each select="events/event">
<xsl:choose>
<xsl:when test="type/text() = 'Processed'">
<xsl:value-of select="result"></xsl:value-of>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>
将生成文本'Sucess'。
答案 1 :(得分:1)
未经测试,我对您尝试实施的逻辑感到有点困惑,但请尝试从此开始:
<xsl:template match="/">
<table>
<xsl:apply-templates select="events/event" />
</table>
</xsl:template>
<xsl:template match="event">
<xsl:if test="type = 'Processed'">
<tr>
<td>
<xsl:value-of select="result" />
</td>
</tr>
</xsl:if>
</xsl:template>
答案 2 :(得分:1)
xsl:choose是另一种选择。从那个链接:
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
xsl:if没有其他功能。