1

如果某个 XPath 查询 Y 包含某个字符串 Z,是否可以应用 XPath 查询 X?

HTML

<div class="pluto">
   <ul>
       <li>apples</li>
       <li>oranges</li>
   </ul>
   Success
</div>

类似 XPath 的东西:

//div[@class='pluto']/text() IF contains(//div/ul/li[1], "apples")

输出

Success
4

1 回答 1

2

只需将条件带到表达式中:

//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]) ))
)
于 2013-06-30T00:51:11.560 回答