如何在XSLT for-each语句中添加多个过滤器?

Huu*_*uze 7 xslt foreach xpath filter

我有以下XSLT节点:

<xsl:for-each select="Book[title != 'Moby Dick']">
....
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

但是,我想在for-each中使用多个过滤器.我尝试了以下内容,但它似乎不起作用:

<!-- Attempt #1 -->
<xsl:for-each select="Book[title != 'Moby Dick'] or Book[author != 'Rowling'] ">
....
</xsl:for-each>


<!-- Attempt #2 -->
<xsl:for-each select="Book[title != 'Moby Dick' or author != 'Rowling']">
....
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 21

但是,我想在for-each中使用多个过滤器

你真正的问题是XPath:在谓词中指定多个条件是否可能,以及如何?

答案:

是的,使用标准的XPath布尔运算符orand标准的XPath函数not().

在这种特殊情况下,select属性中的XPath 可能是:

Book[title != 'Moby Dick' or author != 'Rowling']
Run Code Online (Sandbox Code Playgroud)

我个人总是喜欢写一个等价的表达式:

Book[not(title = 'Moby Dick') or not(author = 'Rowling')]
Run Code Online (Sandbox Code Playgroud)

因为!=当其中一个操作数是节点集时,操作符具有非直观行为.

但我猜你可能想要的是and两个比较 - 而不是or他们.