【问题标题】:XPath preceding axis isn't working as I expectXPath 前轴没有按我预期的那样工作
【发布时间】:2018-09-12 08:01:16
【问题描述】:

我遇到了一个问题,可能更多的是理解问题而不是问题,但我想看看是否有人可以给我一个线索或提示我做错了什么。

我有 5 个td 元素。如下。

<td class="someTDClass1">
    <span class="aSPANClass">
        <div class="theDivClass">
        </div>
    </span>
</td>

<td class="someTDClass2">
    <span class="aSPANClass">
        <div class="theDivClass">
        </div>
    </span>
</td>

<td class="someTDClass1">
    <span class="aSPANClass">
        <div class="theDivClass">
        </div>
    </span>
</td>

<td class="someTDClass3">
    <span class="aSPANClass">
        <div class="theDivClass">
        </div>
    </span>
</td>

<td class="someTDClass2">
    <span class="aSPANClass">
        <div class="theDivClass">
        </div>
    </span>
</td>

现在我想做的是从每个元素的第一个 td 中获取类。 td 类发生变化。但是跨度和 div 没有。所以我写了一个前面的 xpath,它在大多数情况下都可以工作,但它没有抓住最后一个元素。所以我只得到了 4 个 td 元素。我知道,我知道,要使用GetAttribute() 获取类名,我现在正在定位。有谁知道这是为什么?为什么找不到最后一个元素?它包含所有相同的元素。

(//span/div[@class='theDivClass']/preceding::td)

【问题讨论】:

    标签: html xml xpath


    【解决方案1】:

    您的 XPath 仅选择 4 个 td 元素而不是 5 个的原因是 preceding:: 轴不包含祖先,因此您的最后一个 td 没有 div 作为前面的元素存在。

    改变

    //span/div[@class='theDivClass']/preceding::td
    

    //div[@class='theDivClass']/ancestor::td
    

    您将按预期选择所有 5 个td 元素。

    【讨论】:

    • 非常感谢您的帮助。我认为这是沿着这些路线的东西,甚至没有考虑过祖先轴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2013-04-11
    • 1970-01-01
    相关资源
    最近更新 更多