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 クエリを実行したい場合はどうすればよいですか?

thenorelseの部分には、任意の 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])

XPath 1.0 を使用した If-then-else:

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 に答える