Но все они какие-то однотипные: своя структура классов, функции работы с ними, некоторые даже типы данных заводят свои типа 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/
судя по всему интересная, необычная штука, но, к сожалению, не то, что я ищу.