只需将条件带到表达式中:
//div[@class='pluto'][contains(//div/ul/li[1], "apples")]/text()
Sucess
仅当满足该条件时才会返回。否则结果将为空。
附带说明一下,您真正搜索的内容可以简化:
//div[@class='pluto'][contains(ul/li[1], "apples")]/text()
contains
再一次,只有满足条件才会带来结果。
另一方面,在XPath 2.0中,如果您需要一个取决于您的条件而不是节点值本身的值,您可以使用一个if
表达式:
if (//div[@class='pluto'][contains(ul/li[1], "apples")]/text()) then 'OK!' else 'NOT OK!'
如果找到匹配项,则将带上部分then
( 'OK!'
),如果未找到匹配项,则将带上部分。else
('NOT OK!')
更新:
如果条件不满足(有点像 else-if),我想执行另一个 xPath 查询怎么办?
then
您可以在orelse
部分中放置任何 XPath 表达式:
if (//div[@class='pluto'][contains(ul/li[1], "apples")]/text())
then
concat('OK! :',//div/ul/li[1])
else
concat('NOT OK! :',//div/ul/li[2])
If-then-else 使用 XPath 1.0:
concat(
substring(concat('OK! :', //div/ul/li[1]) , 1, number( boolean(count( //div[@class='pluto'][contains(ul/li[1], "apples")]/text() ))) * string-length( concat('OK! :', //div/ul/li[1]) )),
substring(concat('NOT OK! :',//div/ul/li[2]) , 1, number(not(boolean(count( //div[@class='pluto'][contains(ul/li[1], "apples")]/text() )))) * string-length( concat('NOT OK! :',//div/ul/li[2]) ))
)