Xml parser библиотека для C/C++

dj_raven
Дата: 01.06.2015 23:47:23
День добрый.
Существует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы? Например, код мог бы выглядеть так:

//Эта часть должна быть в библиотеке:
struct xml_struct
{
    short       level; //XML element level
    char        tag[32]; //tag name
    short       data_type; //output data type
    char*       data; //pointer of the memory, to store data
    (int*)(char* buf); //some function to process the data
}
... processing functions, data and similar library things

//А эта часть уже будет в нашем коде, используя ф-ции библиотеки
    xml_struct CtrlDataRsp[] =
    {
        {0, "some tag", STR,    SomeVarToStoredata,   NULL},
            {1, "some subtag", LONG,    SomeVarToStoredata,   SomeConversionFunction},
        {0, "/some tag", STR,    SomeVarToStoredata,   NULL},
        {NULL}
    };

void main()
{
    char buf[1024]={0};
    //some code to receiva data int buf variable
    parse(CtrlDataRsp, buf); //let's get data from the xml structure to the variables
    let's process data
}


Я уже много библиотек посмотрел, но нигде нет возможности работать с такими таблицами. Я уже с такими библиотеками сталкивался до этого, так что знаю что они существуют. Хотелось бы одну такую использовать в своем проекте. Ато самому уже поднадоело писать да и времени нет
Заранее благодарю.
Compositum
Дата: 02.06.2015 09:46:30
dj_raven,

Рекомендую не лениться пользоваться поиском в Интернет, прежде чем создавать тему. Например, Google сразу же находит это.
dj_raven
Дата: 02.06.2015 13:45:32
Я это уже видел. Пробегался по сэмплам кода каждой библиотеки, но там все в виде ф-ций сделано. Нет таблиц. Проще самому парсер написать, нежели каждый раз писать новую ф-цию, используя ети библиотеки, по мере дополнения функционала.
Compositum
Дата: 02.06.2015 13:48:01
dj_raven
Проще самому парсер написать

Хозяин - барин, как говорится.
petalvik
Дата: 02.06.2015 13:50:25
dj_raven,

я так понимаю, нужна автоматическая генерация кода?
Вот здесь список утилит, генерирующих код (есть и C++) по схеме xml.
dj_raven
Дата: 02.06.2015 15:08:50
Нет, автоматическая генерация кода не нужна. Нужен именно парсер, который умеет процессировать данные по таблицам, которые ты сам пишешь в код, и затем передаешь функции. Она же в свою очередь, идет по этой статической таблице, и смотрит есть ли тэг в полученных данных, если есть, записывает данные в переменную, указанную в таблице для этого тега, если нет, идет дальше. Судя по тому, что, пока-что, никто не понял о чем речь, библиотеки с которыми я сталкивался, были частными наработками. Продолжу писать свой вариант такого парсера :)
mayton
Дата: 02.06.2015 15:15:38
Не очень понятны ограничения. Зачем длина тега искусственно ограничивается?
Что такое SomeConversionFunction? Где ее состояние? Почему она не учитывает контекст?
petalvik
Дата: 02.06.2015 15:25:46
dj_raven
Судя по тому, что, пока-что, никто не понял о чем речь

Почему же, суть понятна. Вот только подойти к решению задачи можно с разных сторон. В .NET это делается элементарно с помощью XmlSerializer'а (он же deserializer). Сперва генерируем по xml набор классов, потом десериализуем данные, дальше обрабатываем их. А уж какие ConversionFunction использовать - дело десятое. Главное, чтобы было удобно это указать. Хочется в виде таблицы - не вопрос.
Вот только я лично не занимаюсь подобным в C++, поэтому не могу подсказать конкретную библиотеку/код.
Владимир2012
Дата: 02.06.2015 15:54:40
dj_raven
Существует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы?

Что-то типа [url=]https://ru.wikipedia.org/wiki/XML-RPC[/url]?
/т.е. xml содержит данные для выполнения каких-либо функций/
dj_raven
Дата: 02.06.2015 16:00:28
mayton
Не очень понятны ограничения. Зачем длина тега искусственно ограничивается?
Что такое SomeConversionFunction? Где ее состояние? Почему она не учитывает контекст?

Может и не ограничиваться, это пример
SomeConversionFunction - указатель на ф-цию, которая будет вызываться, вместо стандартной, если не 0.
Насчет контекста, это пример, а не актуальный код