XSLT如何添加逻辑

时间:2009-09-22 18:34:17

标签: xml xslt

我在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 =“已处理”....如果不是......那么......我会把剩下的事情搞清楚......

3 个答案:

答案 0 :(得分:1)

您可以使用<xsl:if>

添加if / else if逻辑到XSLT

还可以使用带有<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 &gt; 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没有其他功能。