XML парсеры
Jun. 1st, 2004 06:09 pmРазбирался с XML модулями перла
(XML - язык разметки типа HTML, а модули программульки позв. с ним работать из перла)
Так вот, все эти XML модули необычайно похожи на наших отечественных ментов. Одни умеют читать, другие писать... а вот так чтобы и читать и писать - то это наверное целый полковник.
Полковником к стати оказался XML::Mini - наредкость приятным на вид...
(XML - язык разметки типа HTML, а модули программульки позв. с ним работать из перла)
Так вот, все эти XML модули необычайно похожи на наших отечественных ментов. Одни умеют читать, другие писать... а вот так чтобы и читать и писать - то это наверное целый полковник.
Полковником к стати оказался XML::Mini - наредкость приятным на вид...
no subject
Date: 2004-06-01 07:16 am (UTC)Парсишь одним модулем, получаешь DOM-дерево, обрабатываешь, выводишь другим.
no subject
Date: 2004-06-01 07:29 am (UTC)А если серьезно... то из док совершенно не прослеживалась приемственность ентих самых модулей... что они с одним и тем же деревом работают... Наверное мой ляп...
Вроде бы XML::Mini все могЕт... Только с русскими буквами у него какие-то экзотические отношения... он вместо них конструкции с решетками рисует... но это мы сейчас посмотрим и может поправим...
no subject
Date: 2004-06-01 07:46 am (UTC)если ты отпарсил DOM-дерево, то получил на него ссылку и можешь скормить какому-нибудь обработчику. Обработчик будет с ним обращаться через методы примерно
$x = $node->firstChild();
while ($x)
{
....
$x = $x->nextSibling();
}
при этом код, реализующий эти методы, никого не волнует
более того, в любых других языках эти методы будут те же.
в этом и есть сила XML. ну или заметная ее часть.
no subject
Date: 2004-06-01 09:26 am (UTC)А устроено ли дерево в памяти одним и тем же способом...
Или все остальные обработчики будут работать с этим деревом исключительно через его методы, невзирая на его внутреннее устройство...
Давай поступим проще... какой модуль использовать для парсенья? какой для изменения? какой для вывода?...
Я конечно понаписал щас кой чего, но перепесать еще не позно...
Или так и оставим XML::Mini ?
no subject
Date: 2004-06-01 09:38 am (UTC)Ну а если те, которые не будут - "жила была девочка. Сама виновата."
Варианты?
"Не приходите, не имея вариантов решения" :)
no subject
Date: 2004-06-01 09:53 am (UTC)Про девочку тоже знаю...
Вот и я спрашиваю, варианты...
Есть XML::Mini, который все в одном флаконе, построитель дерева и его модификатор и вывод назад в XML
Есть XML::LibXML который таки строит DOM дерево... но если посмотреть на методы из XML::LibXML::Element станет понятно что к этому дереву можно можно обращаться только на чтение... Если там где-то что-то есть про запись, ткните меня носом в это место плиз...
Есть XML::Parser Который умеет строить дерево из хэшей, но не умеет запихивать его обратно в XML
Есть XML::XPathКоторый так же не позволяет модифицировать дерево...
Есть XML::SimpleВ котором все хорошо, умеет писать и читать, но только не умеет следить за порядком детей внутри родителя... А нам этот порядок важен...
Я что-то важное пропустил?
no subject
Date: 2004-06-01 10:17 am (UTC)XML::DOM
Там есть XML::DOM::Parser, которые генерирует модифицируемое дерево, которое можно потом вывести при помощи XML::Writer, обрабатывать, например, через XML::XSLT.
no subject
Date: 2004-06-01 11:00 am (UTC)А по поводу XML::XSLT в O'Relly`вской книжке сказано
"XSLT - это механизм, реализующий подстановку шаблона. Язык XSLT - это основанный на XML язык программирования, описывающий преобразования различных типов документов"
IMHO Это совсем не то что нам нада...
XML::DOM... В нем действительно есть вывод назад в текстовый вид... правда с пометкой что он не входит в DOM спецификацию... И вроде бы все что нужно можно изменять...
Правда ни одно явного довода в пользу XML::DOM в сравнении с XML::Mini я не вижу...
XML::DOM - более стандартная конструкция
XML::Mini - более простая и понятная...
Вообщем я готов бросить все и начать работать с XML::DOM, если это хоть зачем-то надо...
no subject
Date: 2004-06-01 10:20 am (UTC)no subject
Date: 2004-06-01 07:46 am (UTC)no subject
Date: 2004-06-01 09:22 am (UTC)