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布尔运算符or
和and
标准的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
他们.