XPath "Не".Игнорировать ветки с определенным тегом - PullRequest
2 голосов
/ 28 февраля 2012

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

Я полагаю, мне нужно // text (), а затем 'not', чтобы игнорировать любой тег внутри ветви, в котором есть <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)

Есть предложения?

1 Ответ

2 голосов
/ 28 февраля 2012

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

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

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

или

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