Нетривиальные выборки с помощью pQuery - PullRequest
0 голосов
/ 26 ноября 2009

Я использую pQuery (Perl-порт jQuery) для выбора элементов и извлечения текста из HTML-документа.

Рассмотрим следующую разметку:

<x>
   <y>code1</y>
   <z>stuff</z>
   <y>code2</y>
   <z>foobar</z>
</x>

И следующий код pQuery:

my $target_value = pQuery($markup)->find($pquery_selector)->text;

Я пытаюсь сформулировать $pquery_selector, чтобы он соответствовал <z>foobar</z> в разметке выше, используя следующее правило: найдите элемент z, который следует после y -элемента, который имеет тело, содержащее "code2". Хотя это возможно с помощью jQuery, я не уверен, что синтаксис pQuery достаточно силен для обработки такого выражения.

Возможен ли этот тип выделения с использованием синтаксиса pQuery?

1 Ответ

1 голос
/ 28 ноября 2009

В jQuery возможно написать селектор типа 'y: Содержит (code2) + z'. Однако pQuery все еще не завершен (по состоянию на версию 0.07), и селектор типа x + z просто выдает ошибку, демонстрирующую, что разработчик модуля не удосужился перевести эту часть кода jQuery.

Поскольку pQuery не затрагивался с 2008 года, я бы рекомендовал либо исправить его самостоятельно (код находится на cpan и github), либо использовать более зрелый модуль, такой как HTML :: TreeBuilder :: XPath (который требует изучения Синтаксис XPath, но на самом деле работает для нетривиальных вещей).

Эквивалентом XPath вышеупомянутого селектора jQuery будет '// y [содержит (text (),' code2 ')] / follow-sibling :: z'

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