首页 > 解决方案 > 如何使用 XPath 选择具有特定内部文本的元素的直接兄弟?

问题描述

这是我的示例源 HTML:

<!-- Many other elements above this -->

<div class="emf-div-field">
    <span style="width:175px">
        <input class="validate[required]" style="width:100%" value="" id="element_2" name="element_2" type="text">
        <label for="element_2" class="emf-bottom-label emf-text-center">First</label>
    </span>

    <span style="width:125px">              
        <input class="validate[optional]" style="width:100%" value="" id="element_6" name="element_6" type="text">
        <label for="element_6" class="emf-bottom-label emf-text-center">Middle</label>
    </span>

    <span style="width:175px">
        <input class="validate[required]" style="width:100%" value="" id="element_3" name="element_3" type="text">
        <label for="element_3" class="emf-bottom-label emf-text-center">Last</label>
    </span>

</div>

<!-- Many other elements below this -->

我需要XPath 来选择innerText 为“First”的<input>元素之前的元素。<label><input>元素始终是该元素的兄弟<label>

它需要是基于<label>innerText 的相对选择,因为通常这些语句可能处于许多不同的级别。

我已经尝试过这个(以及许多其他变体),但没有一个奏效:

//input[preceding-sibling::label[text() = "First"]]

谢谢。

标签: javascripthtmlxpath

解决方案


不要让它太复杂。只需使用

//span[label='First']/input

但是,如果您确实需要相对于label元素的路径,请使用

//label[.='First']/preceding-sibling::input[1]

推荐阅读