При добавлении text () в мой XPath количество результатов дублируется.Зачем? - PullRequest
0 голосов
/ 25 марта 2019

Следующий Xpath, выполненный в веб-инспекторе Chrome, возвращает ожидаемое число узлов 13

//*[@id="day1"]//span[contains(@class, 'day-time-clock')]

Однако, когда я добавляю к нему текст ():

//*[@id="day1"]//span[contains(@class, 'day-time-clock')]/text()

itвозвращает 26 узлов.Тем не менее, только каждое другое попадание фактически указывает где-то в исходном коде, остальные просто «оцепенели».

Конечный узел выглядит следующим образом

<span class="medium bold day-time-clock">
            09:00
            <div class="tooltip-box first-free-tip ">
                <div class="tooltip-box-inner">
                    <span class="fa fa-clock-o"></span>
                    Some text
                </div>
            </div>
        </span>

Пример кода выше непокажите, как именно это выглядит в веб-инспекторе, в тексте этого узла есть пара пустых строк.Вот небольшой скриншот того, как это выглядит на самом деле.

enter image description here

Почему это происходит?И что я могу с этим поделать?

1 Ответ

1 голос
/ 26 марта 2019

Ваши элементы span имеют несколько дочерних текстовых узлов.Некоторые из дочерних текстовых узлов содержат только пробелы.В вашем примере внешний элемент span имеет один дочерний текстовый узел, содержащий «.... 09:00 ....», где «....» представляет пробел, плюс один дочерний текстовый узел, следующий сразу за дочерним элементом div,(Кстати, мой HTML-код ржавый, но я не думал, что наличие div внутри span было разрешено.)

Ваш второй (внутренний) элемент span не содержит текстовых узлов, поэтому /text() для этого следуетничего не выбирать.

Как правило, использование /text() в XPath - плохая идея, если у вас нет веских причин и вы точно знаете, что делаете.

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