2012-10-05 38 views
1

我正在开发一个RSS管理器,各种RSS提要将包含各种元素,有些可能不包含这些元素。我想实现一个xsl:if语句,如果元素不存在于feed中就不显示元素。XSL“if”语句不显示元素如果它不存在

例如:

<xsl:template match="item"> <!--an item in a feed--> 
<xsl:value-of select="title" /> <!--display feed items title--> 

<xsl:value-of select="author" /> <!--to display item's author BUT not all feed items have an author--> 

我怎样才能让这个不显示作者信息,除非该元素存在?

+0

显然你可以使用 - 等 - 但我不明白如何测试条件。 – AlexM

+2

请提供源XML!我会用来匹配具有作者的项目并保存。最好的问候,彼得 – Peter

回答

3

如果使用XSLT编码标准的递归下降的风格,那么

<xsl:apply-templates select="author"/> 

达到要求的效果:如果没有作者,则不输出任何内容。

0

< xsl:apply-templates select =“item [title]”>仅当它包含“title”元素时才会使用“item”模板。
@Peter:项目/作者不会与项目父搭配作者孩子,但笔者项目
@AlexM:我宁愿不要模仿程序编程和使用XSLT的方式,而不是

+1

我认为他更关心的是一件物品是否有作者。这就是我请求源XML的原因。没有它,它大多只是猜测。 – Peter

2

XSL从不抱怨节点的所有脑干,简单地说就是只有当节点存在默认情况下才会这样做。

在上面的代码中,它试图找到<author>节点,如果发现它会复制else ignore。

如果你担心不必要的空格,然后使用该命令:(假设当前节点是作者的母公司)

<xsl:if test='author'> 
    <xsl:value-of select="author" /> 
</xsl:if>