Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Обработка структуры данных - дерева


Автор: kingu 22.12.2008, 03:15
Доброго времени суток

Использую DBIx::MyParsePP для синтаксического разбора SQL запроса (MySQL). Цель - модифицировать запросы.
Как результат - модуль выдает структуру в виде дерева:
- rule (узлы дерева): [ название, @дочерние элементы]
- token (листья дерева, конечные элементы): [название, значение]

Требуется делать поиск разного вида:  
- если rule1 является дочерним элементом rule2, то ...
- если у правила rule1 дочерними элементами есть token1, any-rule, token2, то ...
и т.п. В некоторой степени напоминает CSS.  
Сейчас все эта обработка реализованна в виде рекурсивного обхода всего дерева с анализом каждого элемента. Получается достаточно запутано. Хочется отделить условия поиска и обработчики от самого обхода дерева.
Может есть модуль, который умеет работать с tree-структурами и выполнять подобного рода поиск с вызовом обработчиков для найденных элементов? Сам искал, не нашел.

Если кто-то подскажет ключевые слова для поиска алгоритмов - тоже пригодится.

Спасибо.

Автор: KSURi 22.12.2008, 10:51
http://search.cpan.org/~samtregar/Class-XPath-1.4/XPath.pm

Автор: dmitryk1 22.12.2008, 11:51
Цитата(KSURi @ 22.12.2008,  10:51)
XPath.pm

Классно.

А как это прикрутить к работе с базой данных? С таблицей:

ID | ParentID | Name 

например.

А этот модуль, как я понял, позволяет использовать XPath только с загруженным хтмлем?

судя по:
Код

  my $root = HTML::TreeBuilder->new;
  $root->parse_file("foo.html");1

 
Или подразумевается любая структура данных загруженная в память?

Но в таком случае к работе с базой это не применимо :(

2kingu:

В оракле, в его sqlе есть специальные формы запросов, для таких поисков, типа найти чилдрена такой ветки с таким-то названием... или подобное. Возможно и в mysqle такое есть. я бы советовал порыть в направлении sql запроса, как самый быстрый и удобный вариант.


Автор: KSURi 22.12.2008, 13:00
dmitryk1, а зачем прикручивать это к базе? В первом посте такого условия не было, насколько я понял.
Применять данный модуль можно к любой структуре данных.

Автор: dmitryk1 22.12.2008, 18:45
Цитата(KSURi @ 22.12.2008,  13:00)
dmitryk1 В первом посте такого условия не было, насколько я понял.

Мда... Действительно невнимательно прочитал видимо. Увидел то, что хотел smile В любом случае, подчерпнул массу полезной информации smile 

Автор: kingu 24.12.2008, 13:39
KSURi, спасибо за Class::XPath, похоже на то что нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)