XPath «Не». Игнорировать ветки с определенным тегом

html-agility-pack xpath

Вопрос

Я загрузил веб-страницу в HTML Agility Pack и получил DOM. Я хочу использовать XPATH, чтобы вытащить весь текст на странице (но не javascript, найденный в тегах <script> ).

Я полагаю, мне нужен // текст (), а затем «нет», чтобы игнорировать любой тег в ветке, в котором есть <script> .

я пытался

doc.DocumentNode.SelectNodes("//text()[not(self::script)]"))

а также

doc.DocumentNode.SelectNodes("//text()[not(script)]"))

но не работают. Пример свойства XPath узла, который они возвращают (обратите внимание на скрипт)

/html[1]/body[1]/div[2]/div[4]/div[1]/div[1]/div[1]/div[3]/script[1]/#text[1]

Я консультировался с обоими этими сообщениями.

Можно ли выполнить «не» сопоставление в XPath?

Возьмите весь текст из html с Html Agility Pack (это хороший пост, но он показывает JS)

Какие-либо предложения?

Принятый ответ

Ваша первая попытка отвергает все текстовые узлы, которые являются элементами сценария, а вторая отклоняет все текстовые узлы, у которых есть дочерние узлы скрипта. Конечно, в обоих случаях условие никогда не бывает истинным.

Вы четко не объяснили свои требования, но я думаю, вы хотите отклонить все текстовые узлы, у которых есть элементы сценария в качестве их родителя, что

//text()[not(parent::script)]

или

//*[not(self::script)]/text()


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow