2

コードの休眠サンプルについては、type = "a"で、子としてテキスト"3"のtdを持つtrが存在するかどうかを確認する必要があります。

<table>
    <tr type="a">
     <td>1</td>
    </tr>
    <tr type="b">
     <td>1</td>
    </tr>
    <tr type="a">
     <td>3</td>
    </tr>
</table>

これを試しました:

    b.tr( :xpath =>"//tr[@type='a']").td( :text =>'3').exists?

ただし、機能しません(xpath式は、既存の2つの最初のtrのみを返します)。

何か案は ?必要なものが存在する場合にtrueを返すxpath式はtrありますか?

4

4 に答える 4

1

使用

boolean(/*/tr[@type='a']/td[. = 3])

このXPath式は、文字列値が数値3に等しく、属性が「a」で、XMLの最上位要素の子である文字列値を親とtrue()するが存在する場合に正確に評価されます。資料。tdtrtypetr

それ以外の場合、XPath式は次のように評価されます。false()

于 2012-12-10T13:40:29.057 に答える
1

または、xpathなしでこれを行うこともできます。

b.trs.count{ |tr|
  tr.attribute_value('type') == 'a' and tr.td(:text, '3').present? 
} > 0

もう少し冗長ですが、xpathよりも読みやすいと思います。

于 2012-12-10T14:43:26.817 に答える
0
b.tr(:xpath =>"//tr[@type='a']", :index => 1).td(:text =>'3').exists?

また

b.tr(:xpath =>"(//tr[@type='a'])[2]").td(:text =>'3').exists?
于 2012-12-10T10:14:10.883 に答える
0

これが役立つかどうかはわかりませんが、このコードはxpath式が返す要素の数を返すので、カウントが0であるかどうかを確認でき、一致しない場合は一致数を返します。

var doc = document.evaluate("//table/tbody/tr[@type='a']/td[text()=1]",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
doc.snapshotLength

また

var doc = document.evaluate("//table[@id='tableId']/tbody/tr[@type='a']/td[text()=1]",document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
doc.snapshotLength

テーブルのIDがある場合。

これが何らかの形で役立つことを願っています。

于 2012-12-10T10:56:26.083 に答える