Выберите все самые глубокие узлы с XPath 1.0, содержащие текст, игнорируя разметку

html xpath xpath-1.0

44 просмотра

1 ответ

Я хочу извлечь элементы из HTML-страницы, содержащие текст, игнорируя разметку. Например, я хочу извлечь узел, содержащий текст «Беги, Сара, беги!» с https://en.wiktionary.org/wiki/run . Я знаю о тесте узла text()и функции string(). Я попробовал их обоих: Firefox с консолью.  Поиск "Беги, Сара, беги!"

Как видите, если я использую, string()он возвращает слишком много узлов (результат включает в себя узлы, которые включают в себя нужный мне узел), и если я использую text()его, он ничего не возвращает (из-за <b>тега).

Как мне найти нужные узлы?

UPD: я хочу все самые глубокие узлы. Это означает, что если на странице Wikitionary содержалось это предложение дважды, я хотел выбрать два узла.

Кроме того, я не знаю тип узла.

Автор: rominf Источник Размещён: 15.08.2019 12:58

Ответы (1)


2 плюса

Решение

//*[contains(string(.), "Run, Sarah, run!")]возвращает все элементы (начиная с htmlузла до последнего узла-потомка), которые содержат эту строку.

//*[contains(text(), "Run, Sarah, run!")]ничего не возвращает как "Run, Sarah, run!"составной текст из нескольких текстовых узлов, но не из одного текстового узла

Вы можете использовать ниже, чтобы сопоставить курсив узел с необходимым текстом:

'//i[normalize-space()="Run, Sarah, run!"]'

Если вы не хотите указывать имя узла, вы можете попробовать

'//*[normalize-space()="Run, Sarah, run!" and not(./*[normalize-space()="Run, Sarah, run!"])]'
Автор: Andersson Размещён: 23.12.2018 07:39
Вопросы из категории :
32x32