Оцените селектор xpath, чтобы получить текст в p- и li-тегах - PullRequest
0 голосов
/ 15 марта 2019

В целях автоматической замены ключевых слов ссылками на основе списка пар «ключевое слово-ссылка» мне нужно получить текст, который еще не связан, не является сценарием или исключен вручную, внутри абзацев (p) и элементов списка (li) -- для использования в модуле Alinks Drupal.

Я изменил существующий селектор xpath следующим образом и хотел бы получить отзыв о нем, если он эффективен или может быть улучшен:

//*[p or li]//text()[not(ancestor::a) and not(ancestor::script) and not(ancestor::*[@data-alink-ignore])]

xpath предназначен для работы с любым содержимым html5, а также с самозакрывающимися тегами (не правильно сформированными xml) - так был разработан модуль, и он работает довольно хорошо.

Ответы [ 2 ]

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

Чтобы выбрать потомок текстового узла из p или li элементов, которые не являются потомками a или script элементов, вы можете использовать XPath 1.0:

//*[self::p|self::li]
   //text()[
      not(ancestor::a|ancestor::script|ancestor::*[@data-alink-ignore])
   ]
0 голосов
/ 16 марта 2019

Ваше выражение XPath недопустимо.Вы пропускаете / до text().Таким образом, допустимое выражение будет

//*[p or li]/text()[not(ancestor::a) and not(ancestor::script) and not(ancestor::*[@data-alink-ignore])]

Но без исходного XML-файла невозможно определить, будет ли это выражение соответствовать желаемому узлу.

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