4

我有一个像这样的xml:

<movies>
    <movie name="aaa">
        ...
    </movie>
    <movie name="bbb">
        ...
    </movie>
    <movie name="ccc">
        ...
    </movie>
    <movie name="ddd">
        ...
    </movie>
    <movie name="eee">
        ...
    </movie>
</movies>

如果不是“aaa”、“bbb”或“ddd”,我想获取电影的名称。所以我希望我的输出是:

ccc
eee

因为我有几个限制,我认为不适合使用'xsl:if'..我写了我的 xslt(我使用的是 xslt 1.0):

<xsl:value-of select="movies/movie/@name[not(self::aaa) and not(self::bbb) and not(self:ddd)]"/>

但是编译器抱怨这句话有语法错误..我不知道为什么..

那么有人可以帮我解决这个问题吗?非常感谢!!

4

2 回答 2

4

试试这个 XPath 表达式:

movies/movie[@name!='aaa' and @name!='bbb' and @name!='ddd']/@name

或者这个:

movies/movie/@name[.!='aaa' and .!='bbb' and .!='ddd']

后者更短,但前者可以轻松扩展以检查其他返回,不仅返回名称,而且返回整个<movie>元素 - 只需/@name在最后删除。或者,如果您想要第二个,只需/..在最后添加。

于 2013-04-08T21:51:56.193 回答
3

考虑使用这样的表达式,以防比较的值太多:

/*/movie[not(contains('|aaa|bbb|ddd|', concat('|', @name, '|)))]/@name

这将选择作为 XSLT 文档顶部元素的子元素name的任何元素的任何属性,并且其(属性的)值不是以竖线分隔的字符串值列表中的字符串之一。moviename"|aaa|bbb|ddd|"

于 2013-04-09T03:56:42.440 回答