xpath - 基于父节点的另一个子节点进行选择

时间:2017-02-08 10:57:34

标签: xpath

我的网页看起来像这样:

<div>
    <div>
        <div>
            <span class="span class one">
                some text
            </span>
        </div>
    </div>
    <div>
        <div>
            <span class="span class two">
                span i want to pick
            </span>
        </div>
    </div>
</div>

我想通过<span class="span class two">中的文字选择<span class="span class one">。我不确定它是否可能。每个树部件中的元素数量不相同。

5 个答案:

答案 0 :(得分:1)

以下可能是替代答案 -

//span[normalize-space(text())='some text']/../../following-sibling::div//span

说明: -

//span[normalize-space(text())='some text']用于查找包含所需详细信息的span标记

/../..将移至上下文节点的父元素

/following-sibling::div//span会找到父span的兄弟元素中的div标记

答案 1 :(得分:0)

您可以使用class属性的值选择元素:

//span[@class='span class two']

答案 2 :(得分:0)

//span[contains(., "some text")]/following::span

出:

Element='<span class="span class two">
                span i want to pick
            </span>'

答案 3 :(得分:0)

尝试这种方式,正如您提到的那样,您想要创建//span[text()= 'some text']/following::span[@class='span class two'] 以及text

<span>

xpath的说明:使用<span>方法和following keyword代码,并使用public class Example { void foo() { void bar() { } } 继续使用其他public class Example { void foo() { } void bar() { } 代码。

答案 4 :(得分:0)

我可能会以不同的方式理解它,但我会尝试给出不同的答案: //span[contains(text(),(//span[@class='span class one']/text())) and not(@class='span class one')]

表示:

//span[contains(text(), - 您正在寻找包含特定文字的span元素

(//span[@class='span class one']/text())) - 该文本是span class one中的文本

and not(@class='span class one')] - 但是span元素不应该是第一类

当然,您可以将text()替换为不同的属性,例如类或名称等等......例如//span[contains(@class,(//span[@class='span class one']/text()))]