2009-09-22 97 views
0

我有一个XML文档中的下列集合:XSLT如何添加逻辑

<events> 
    <event> 
     <type>Downloaded</type> 
     <result>Sucess</result> 
    </event> 
    <event> 
     <type>Processed</type> 
     <result>Sucess</result> 
    </event> 
</events> 

现在在我的XSLT我有一个TD表 - 我想这个TD的值来表示的状态事件。如果事件存在处理,结果是真的,那么我要处理的这个TD的价值,同样,如果处理不存在,那么如果下载存在和地位是成功的,那么我想TD的值设定下载

...

不要指望完整的代码,只是对如何一些编程逻辑添加到XSLT的样本。

我真正需要检查...是

元素是否存在的事件类型为“已处理” ......如果不是......然后......我会离开图休息.....

+0

你有什么这么远吗? – 2009-09-22 18:38:12

+1

2009-09-22 18:38:37

+0

需要检查是否...事件类型....已处理为空...则。 ...检查类型已下载的事件....如果那是null,那么我猜输出没有开始...... – 2009-09-22 18:39:24

回答

1

您可以添加的if/else,如果逻辑与<xsl:if>

XSLT也有有一些像<xsl:choose> switch语句,其中包括不要做“其他”行为能力的能力。

这些构建参加考试的属性,在您指定的条件。 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'。

+0

但是,要获得XSLT 1.0中的/ * else *逻辑,您通常会使用'xsl:when'和' xsl:otherwise'('xsl:if'没有else分支)。 – 2009-09-22 18:40:32

+0

请提供一个简单的例子,用于检查与特定值的元素是否存在等? – 2009-09-22 18:41:45

+0

请注意,在那里使用text()函数 - 如果您不这样做,您检查的文本是所讨论元素的所有子元素的连接值。混淆了人们的地狱。 – Brabster 2009-09-22 18:52:22

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> 
+0

像@JBKing所说,如果您需要“其他”条件,则需要使用 Keith 2009-09-22 18:45:24

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 doen't有别的功能。