XML парсер в DOM tree. C++ (Минимум посторонних конструкций - максимум C++)

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

XML парсер в DOM tree. C++

Сообщение Zeus »

XML-парсеров - кучи.
Но все они какие-то однотипные: своя структура классов, функции работы с ними, некоторые даже типы данных заводят свои типа XMLChar*
Мне это не нужно, угнетает мозг и накладывает ненужный "отпечаток" на стиль кода.

А есть ли простецкий XML-парсер, строящий в памяти DOM из обычных C++ стандартных контейнеров?
Чтобы хранил всё в std::string, безо всяких перекодировок - что прочитал то и прочитал. Сам потом разберусь и если нужно - перекодирую.
Чтобы не надо было половину кода приводить всякие fooChar* в нормальные С++'ные типы данных.
Чтобы можно было итераторами шастать по списку дочерних узлов текущего узла. Чтобы можно было использовать функции стандартной библиотеки алгоритмов.
Чтобы можно было получить значение аттрибута по его имени из std::map: height=node.attributes["height"]
Соответственно и манипуляция была бы - в обычном стиле C++.
Чтобы функций было минимум (в идеале - загрузить и выгрузить), а дальше я уже сам буду шастать по построенному дереву DOM'а и забирать данные.
Кстати, удобно было бы, если бы для загрузки-выгрузки парсеру можно было бы подсовывать поток - т.е. не зависеть от источника (приёмника) XML-данных.

Понятно, что будут какие-то привнесённые примитивы, вроде:

Код: Выделить всё

class Node
{
 std::string name;
 std::string value;
 std::list<Node*> childs;
 std::map<std::string, std::string> attributes;
}


Есть что-нибудь подобное или это фантастика?


Вот тут:
http://www.codesynthesis.com/products/xsd/
судя по всему интересная, необычная штука, но, к сожалению, не то, что я ищу.
Спасибо сказали:
d_n_k
Сообщения: 636
ОС: Gentoo GNU/Linux

Re: XML парсер в DOM tree. C++

Сообщение d_n_k »

libxml++ (http://libxmlplusplus.sourceforge.net/) чем не устроил?

умеет парсить файлы, память, потоки.
Данные хранятся в ++-нутой обертке для std::string (добавлена поддержка UTF-8, в остальном выглядит как std::string)
ноды предоставляют итераторы, так что бегай по ним в свое удовольствие



тока не говори что зависимость от glibmm (glib), libxml2 тебя сильно смущает
все сказанное есть имхо...
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: XML парсер в DOM tree. C++

Сообщение Zeus »

d_n_k писал(а):
27.07.2007 11:50
libxml++ (http://libxmlplusplus.sourceforge.net/) чем не устроил?

Да, я её имею ввиду, но всё-таки ищу более близкое к моему идеалу:
"Минимум посторонних конструкций - максимум C++"


d_n_k писал(а):
27.07.2007 11:50
умеет парсить файлы, память, потоки.

Это хорошо.

d_n_k писал(а):
27.07.2007 11:50
Данные хранятся в ++-нутой обертке для std::string (добавлена поддержка UTF-8, в остальном выглядит как std::string)

Я с UTF-8 работаю и обычными string'ами. Может это и неправильно, но пашет.

d_n_k писал(а):
27.07.2007 11:50
тока не говори что зависимость от glibmm (glib), libxml2 тебя сильно смущает

Э-э... ничего от тебя не скроешь.
Не сильно, но смущает.

Мне вообще не очень нравится, когда одна либа тянет другую, та - третью, четвёртую.
Причём не для какой-то принципиально иной функциональности, а просто - как "обёртки".
Спасибо сказали: