1

我正在开发一个 RSS 管理器,各种 RSS 提要将包含各种元素,有些可能不包含这些元素。我想实现一个 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-->

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

4

3 回答 3

3

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

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

达到要求的效果:如果没有作者,则什么也不输出。

于 2012-10-05T09:10:58.063 回答
2

XSL 从不抱怨节点的存在,简而言之,只有在节点存在时才这样做,默认情况下会得到照顾。

在上面的代码中,它尝试查找<author>节点,如果找到它将复制 else 忽略。

如果您担心不必要的空格,请使用:(假设当前节点是作者的父节点)

<xsl:if test='author'>
    <xsl:value-of select="author" />
</xsl:if>
于 2012-10-05T07:53:40.023 回答
0

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

于 2012-10-05T07:05:49.153 回答