XPath предшествующая ось не работает, как я ожидаю - PullRequest
0 голосов
/ 12 сентября 2018

У меня проблема, возможно, это скорее проблема понимания, чем проблема, но я хотел посмотреть, сможет ли кто-нибудь дать мне подсказку или намек на то, что я делаю неправильно.

У меня 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)

1 Ответ

0 голосов
/ 12 сентября 2018

Причина, по которой ваш XPath выбирает только 4 td элементов, а не 5, заключается в том, что на оси preceding:: нет предков, поэтому у вашего последнего td нет div, для которого он существует как предыдущий элемент.

Измените

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

на

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

, и вы выделите все 5 td элементов, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...