代码之家  ›  专栏  ›  技术社区  ›  JL. Hans Passant

XSLT如何添加逻辑

  •  0
  • JL. Hans Passant  · 技术社区  · 15 年前

    我在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=“processed”……如果没有…那么……剩下的我会想出来的……

    3 回复  |  直到 15 年前
        1
  •  1
  •   brabster    15 年前

    您可以将if/else if逻辑添加到带有 <xsl:if>

    还可以使用类似switch语句的 <xsl:choose> 包括做“其他”行为的能力。

    这些构造接受一个测试属性,在该属性中指定条件。 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>
    

    将生成文本“success”。

        2
  •  1
  •   Keith    15 年前

    未经测试,我对您试图实现的逻辑有点困惑,但请尝试从以下内容开始:

    <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>
    
        3
  •  1
  •   JB King    15 年前

    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 没有其他功能。