大きな XML を取得しました。その XML のスニペットは次のようになります。
<div class="x-column-inner" id="ext-gen422" style="width: 850px;">
<div id="ext-comp-1206" style="width: 14px;" class=" x-column">
<div tabindex="-1" class="x-form-item x-hide-label" id="ext-gen434">
<label class="x-form-item-label" style="width:100px;" for="ext-comp-1180" id="ext-gen435"></label>
<div style="padding-left:105px" id="x-form-el-ext-comp-1180" class="x-form-element">
<div class="x-form-check-wrap" id="ext-gen436" style="width: 14px; height: 28px;">
<input type="checkbox" name="ext-comp-1180" id="ext-comp-1180" autocomplete="off" class=" x-form-checkbox x-form-field">
<label class="x-form-cb-label" for="ext-comp-1180" id="ext-gen437"> </label>
</div></div> <div class="x-form-clear-left">
</div>
</div>
</div>
<div id="ext-comp-1207" style="width: 150px;" class=" x-column">
<label id="ext-comp-1203" style="width: 140px;">Add to Watchlist</label>
</div>
<div id="ext-comp-1208" style="width: 107px;" class=" x-column">
テキスト「ウォッチリストに追加」を持つラベルノードに基づいて、チェックボックスタイプの「入力」ノードを見つける必要があります。
「入力」ノードと「ラベル」ノードの両方が異なる階層にあるため、 // 構文が機能していないようです:
//div[label[contains(text(),'Add to Watchlist')]]
子ラベルの親 div を与えるだけです。このスニペットの最上位ノードから開始しようとしました
$x("//div[@class='x-column-inner' and //label[contains(text(),'Add to Watchlist')]]")
しかし、それは6つの可能な一致を与えています。
注: @id 属性はノードに動的に割り当てられるため使用できません。そのため、次回ページが読み込まれると @id が異なります。position() 述語を使用したくないのは、XPATH が静的になり、位置が変更されると xpath が壊れる可能性があるためです。