我有一个很大的 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 可能会随着位置的任何变化而中断。