Как получить текст выделенных элементов в XPath? - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь извлечь несколько сообщений на форуме, используя стандартный метод XPath:

response.xpath('.//div[contains(@class, "Message userContent")]')

Этот ответ возвращает полный список комментариев по желанию.

Нокак только я включаю //text() или string(...), длина списка увеличивается до 100 или 150 элементов, что делает невозможным понимание или перебор списка и объединение его с другими данными, такими как автор или дата ...

normalize-space(...) возвращает только первый комментарий.

Он должен что-то делать со всеми новыми строками и разрывами в HTML-коде, но на данном этапе я не знаю, как с этим справиться.

Будет ли string-join(...[normalize-space()]) вариант здесь?

1 Ответ

0 голосов
/ 08 июня 2018

Поймите, что выбирает каждый XPath:

  1. .//div[contains(@class, "Message userContent")] выбирает div элементов.
  2. .//div[contains(@class, "Message userContent")]//text() выбирает всех потомков текстовых узлов этихdiv elements.
  3. normalize-space(.//div[contains(@class, "Message userContent")]) в XPath 1.0 принимает нормализованное по пространству значение строки первого такого div элемента.
  4. normalize-space(.//div[contains(@class, "Message userContent")]) в XPath 2.0 является ошибкой времени выполнения, когдаnormalize-space() передается последовательность.

Если вы хотите получить строковые значения каждого такого div:

  • XPath 1.0: Перебирать выбранные элементы div на языке хостинга и отдельно принимать строковое значение.
  • XPath 2.0: Добавить /string() к XPath.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...