powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Xml parser библиотека для C/C++
83 сообщений из 83, показаны все 4 страниц
Xml parser библиотека для C/C++
    #38973860
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Существует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы? Например, код мог бы выглядеть так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
//Эта часть должна быть в библиотеке:
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
}



Я уже много библиотек посмотрел, но нигде нет возможности работать с такими таблицами. Я уже с такими библиотеками сталкивался до этого, так что знаю что они существуют. Хотелось бы одну такую использовать в своем проекте. Ато самому уже поднадоело писать да и времени нет
Заранее благодарю.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38973991
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven,

Рекомендую не лениться пользоваться поиском в Интернет, прежде чем создавать тему. Например, Google сразу же находит это .
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974290
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я это уже видел. Пробегался по сэмплам кода каждой библиотеки, но там все в виде ф-ций сделано. Нет таблиц. Проще самому парсер написать, нежели каждый раз писать новую ф-цию, используя ети библиотеки, по мере дополнения функционала.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974294
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenПроще самому парсер написать
Хозяин - барин, как говорится.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974296
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven,

я так понимаю, нужна автоматическая генерация кода?
Вот здесь список утилит, генерирующих код (есть и C++) по схеме xml.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974372
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет, автоматическая генерация кода не нужна. Нужен именно парсер, который умеет процессировать данные по таблицам, которые ты сам пишешь в код, и затем передаешь функции. Она же в свою очередь, идет по этой статической таблице, и смотрит есть ли тэг в полученных данных, если есть, записывает данные в переменную, указанную в таблице для этого тега, если нет, идет дальше. Судя по тому, что, пока-что, никто не понял о чем речь, библиотеки с которыми я сталкивался, были частными наработками. Продолжу писать свой вариант такого парсера :)
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974376
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень понятны ограничения. Зачем длина тега искусственно ограничивается?
Что такое SomeConversionFunction? Где ее состояние? Почему она не учитывает контекст?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974388
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenСудя по тому, что, пока-что, никто не понял о чем речь
Почему же, суть понятна. Вот только подойти к решению задачи можно с разных сторон. В .NET это делается элементарно с помощью XmlSerializer'а (он же deserializer). Сперва генерируем по xml набор классов, потом десериализуем данные, дальше обрабатываем их. А уж какие ConversionFunction использовать - дело десятое. Главное, чтобы было удобно это указать. Хочется в виде таблицы - не вопрос.
Вот только я лично не занимаюсь подобным в C++, поэтому не могу подсказать конкретную библиотеку/код.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974426
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenСуществует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы?
Что-то типа https://ru.wikipedia.org/wiki/XML-RPC ?
/т.е. xml содержит данные для выполнения каких-либо функций/
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974432
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНе очень понятны ограничения. Зачем длина тега искусственно ограничивается?
Что такое SomeConversionFunction? Где ее состояние? Почему она не учитывает контекст?
Может и не ограничиваться, это пример
SomeConversionFunction - указатель на ф-цию, которая будет вызываться, вместо стандартной, если не 0.
Насчет контекста, это пример, а не актуальный код
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974436
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petalvikdj_ravenСудя по тому, что, пока-что, никто не понял о чем речь
Почему же, суть понятна. Вот только подойти к решению задачи можно с разных сторон. В .NET это делается элементарно с помощью XmlSerializer'а (он же deserializer). Сперва генерируем по xml набор классов, потом десериализуем данные, дальше обрабатываем их. А уж какие ConversionFunction использовать - дело десятое. Главное, чтобы было удобно это указать. Хочется в виде таблицы - не вопрос.
Вот только я лично не занимаюсь подобным в C++, поэтому не могу подсказать конкретную библиотеку/код.

Спасибо за ответ, но у меня проект кросс платформенный, под Linux и Windows. Поэтому нужны или исходники библиотек, чтобы скомпилировать, или установка под линь и винду
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974441
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир2012dj_ravenСуществует- ли какая толковая XML парсер библиотека для C/C++, работающая как под Windows так и под Linux, способная воспринимать структуру XML док в виде таблицы?
Что-то типа https://ru.wikipedia.org/wiki/XML-RPC ?
/т.е. xml содержит данные для выполнения каких-либо функций/
Нет, тоже не то. Как я уже говорил, в парсере должна быть структура, с помощью которой можно описать структуру входящего XML, и указать переменные, куда записать данные, после этого передать в функцию обработки, из этой же библиотеки, чтобы загрузить данные в переменные.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974483
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenСуществует- ли какая толковая XML парсер библиотека ... способная воспринимать структуру XML док в виде таблицы?

Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов.
Поэтому такой библиотеки в принципе быть не может.

Но, однако, есть например gSOAP, оно такое делает.
Но это -- не совсем только лишь парсер XML.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974552
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivdj_ravenСуществует- ли какая толковая XML парсер библиотека ... способная воспринимать структуру XML док в виде таблицы?

Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов.
Поэтому такой библиотеки в принципе быть не может.

Но, однако, есть например gSOAP, оно такое делает.
Но это -- не совсем только лишь парсер XML.
Ну, это по вашему мнению такой библиотеки быть не может, хотя, скорей всего, вы не поняли принцип действия, который я описал. я на двух предыдущих работах имел дело с двумя такими библиотеками, и все прекрасно работало.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974565
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что сейчас мешает использовать "библиотеки с двух предыдущих мест работы"?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974573
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenКак я уже говорил, в парсере должна быть структура, с помощью которой можно описать структуру входящего XML, и указать переменные, куда записать данные, после этого передать в функцию обработки, из этой же библиотеки, чтобы загрузить данные в переменные.
На мой взгляд эта задача аналогична следующей.
Имеем какие-то диалоговые формы /понятно с своим набором полей/.
Диалоговые формы сериализуются.
Задача клиента - принять данные xml в какие-то переменные, которые будут использованы
одной или несколькими функциями.
Оно?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974578
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovИ что сейчас мешает использовать "библиотеки с двух предыдущих мест работы"?
У меня их нет. Поэтому сижу пишу свою, на тех же принципах (не думал что такое понадобится когда нить). Но, если честно, уже поднадоело, потому решил обратиться к народу с вопросом. Может кто знает где достать библиотеки с подобным принципом действия
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974586
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenBasil A. SidorovИ что сейчас мешает использовать "библиотеки с двух предыдущих мест работы"?
У меня их нет. Поэтому сижу пишу свою, на тех же принципах (не думал что такое понадобится когда нить). Но, если честно, уже поднадоело, потому решил обратиться к народу с вопросом. Может кто знает где достать библиотеки с подобным принципом действияНет. Таких библиотек в широком доступе быть не может.
XML это дерево . Дерево можно впихнуть в таблицу если принудительно отрезать ему ветки ниже какого-либо уровня. Но это уже будет чрезвычайно зависимо от конкретной задачи и очень не универсально. Именно поэтому никто таких библиотек не делает.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974589
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДерево можно впихнуть в таблицу если принудительно отрезать ему ветки ниже какого-либо уровня.
или размножить с другой стороны
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974608
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир2012dj_ravenКак я уже говорил, в парсере должна быть структура, с помощью которой можно описать структуру входящего XML, и указать переменные, куда записать данные, после этого передать в функцию обработки, из этой же библиотеки, чтобы загрузить данные в переменные.
На мой взгляд эта задача аналогична следующей.
Имеем какие-то диалоговые формы /понятно с своим набором полей/.
Диалоговые формы сериализуются.
Задача клиента - принять данные xml в какие-то переменные, которые будут использованы
одной или несколькими функциями.
Оно?
Тоже не то. Попробую еще раз объяснить на примере. Извиняюсь, но все комментарии будут на английском, замучаюсь транслит.нет текст в правильный вид потом переводить
XML structure to parse:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<control data response>
        <controllers>1</controllers>
  	<controller info>
    		<name>ZX1</name>
     		<port>COM1</port>
  	</controller info>
</control data response>


Structure for building xml description table in C/C++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
typedef struct xml_struct
{
    short       level;
    char        tag[32];
    short       type;
    short       data_type;
    char*       data;
    int            p_cnv_function(char*);
}xml_struct;


Definition of the variables to store data:
Код: plaintext
1.
2.
3.
    short ctrlcnt;
    char    name[16];
    char    port[8];


And here is the table, describing XML structure i have posted above:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
xml_struct rsp_descr[]=
{
   {0, "control data response", OPNTAG, NULL, NULL, NULL},
   {1, "controllers", DATATAG, FLDSHRT, (char*) &ctrlcnt, NULL},
   {1, "controller info", OPNTAG, NULL, NULL, NULL},
   {2, "name", DATATAG, FLDSTR, name, NULL},
   {2, "port", DATATAG, FLDSTR, port, NULL},
   {1, "controller info", CLOSETAG, NULL, NULL, NULL},
   {0, "control data response", CLOSETAG, NULL, NULL, NULL},
   {NULL}
}



After we have all descriptions of possible incoming xml data, let's process them and fill the variables with data
Код: plaintext
1.
parse(xmldatabuffer,  rsp_descr);



В обсчем , вот по такому принципы должна работать библиотека, которую мне хотелось бы найти, самому писать, много времени занимает.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974612
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И просьба, если не знаете таких библиотек, то луче ничего не пишете, а не пытайтесь меня убедить, что их не может быть в принципе :) Если я её не найду, я её просто напишу сам
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974630
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenMasterZivпропущено...


Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов.
Поэтому такой библиотеки в принципе быть не может.

Но, однако, есть например gSOAP, оно такое делает.
Но это -- не совсем только лишь парсер XML.
Ну, это по вашему мнению такой библиотеки быть не может, хотя, скорей всего, вы не поняли принцип действия, который я описал. я на двух предыдущих работах имел дело с двумя такими библиотеками, и все прекрасно работало.

я все отлично понял.
у тебя есть массив структур, сериализованный в xml, и ты хочешь его десериализовать обратно в память.

но еще раз, общая задача парсера xml другая - распарсить любой xml, иначе такой парсер никому будет не нужен, но проблема в том, что xml - это не массив строк, содержащих поля, а дерево тегов произвольной структуры, поэтому такую библиотеку ты не найдешь нигде.

ее лучше всего написать самому на базе SAX парсера, или ты можешь взять что-то типа gSOAP, WSDL, описать свои 30 структур и сгенерировать по ним парсеры, и использовать их как библиотеку.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974633
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenMasterZivпропущено...


Как бы есть одна проблема -- XML -- это не таблица, а дерево тегов.
Поэтому такой библиотеки в принципе быть не может.

Но, однако, есть например gSOAP, оно такое делает.
Но это -- не совсем только лишь парсер XML.
Ну, это по вашему мнению такой библиотеки быть не может, хотя, скорей всего, вы не поняли принцип действия, который я описал. я на двух предыдущих работах имел дело с двумя такими библиотеками, и все прекрасно работало.

я все отлично понял.
у тебя есть массив структур, сериализованный в xml, и ты хочешь его десериализовать обратно в память.

но еще раз, общая задача парсера xml другая - распарсить любой xml, иначе такой парсер никому будет не нужен, но проблема в том, что xml - это не массив строк, содержащих поля, а дерево тегов произвольной структуры, поэтому такую библиотеку ты не найдешь нигде.

ее лучше всего написать самому на базе SAX парсера, или ты можешь взять что-то типа gSOAP, WSDL, описать свои 30 структур и сгенерировать по ним парсеры, и использовать их как библиотеку.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974638
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenИ просьба, если не знаете таких библиотек, то луче ничего не пишете, а не пытайтесь меня убедить, что их не может быть в принципе :) Если я её не найду, я её просто напишу сам

я уверен, что библиотека ваша была доморощенная.

в то, что ты ее напишешь, я лично не верю, потому что иначе уже бы написал - там реально делать нечего.

но ты похоже на делфи программировал.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974640
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный какой-то XML - с пробелами в именах элементов
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974650
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Велосипедище ясен пень. Я пытаюсь увидеть какое-то интересное зерно в функции SomeConversionFunction
но тщетно. Деревянно как-то и велосипедно. Просто fucken stateless function.

Вот Apache Digester красиво реализован мдя...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974657
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenAnd here is the table, describing XML structure i have posted above:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
xml_struct rsp_descr[]=
{
   {0, "control data response", OPNTAG, NULL, NULL, NULL},
   {1, "controllers", DATATAG, FLDSHRT, (char*) &ctrlcnt, NULL},
   {1, "controller info", OPNTAG, NULL, NULL, NULL},
   {2, "name", DATATAG, FLDSTR, name, NULL},
   {2, "port", DATATAG, FLDSTR, port, NULL},
   {1, "controller info", CLOSETAG, NULL, NULL, NULL},
   {0, "control data response", CLOSETAG, NULL, NULL, NULL},
   {NULL}
}

Скорее так:
...
...
{2, "name", DATATAG, FLDSTR, &name, NULL},
{2, "port", DATATAG, FLDSTR, &port, NULL},
...
...
Ведь name и port это скорее всего переменные в которые ты хочешь принять их значения.

И все же еще один вопрос.
Судя по приведенному примеру имеем n каких то контроллеров, которые имеют каждый несколько
входов и выходов /судя по примеру нас интересует получение от них данных/.
/все же твой пример аналогичен диалоговой форме. Имеется какое-то число short type; их типов.
Наименование которой находится в char tag[32]; и конечно каждая из них имеет свой
набор полей/
Если это не так, то приведи пожалуйста пример rsp_descr скажем у которого max значение уровня == 4.
Конечно понимаю, что ты сейчас можешь скажем в node dj_ravenAnd here is the table, describing XML structure i have posted above:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
xml_struct rsp_descr[]=
{
   {0, "control data response", OPNTAG, NULL, NULL, NULL},
   {1, "controllers", DATATAG, FLDSHRT, (char*) &ctrlcnt, NULL},
   {1, "controller info", OPNTAG, NULL, NULL, NULL},
   {2, "name", DATATAG, FLDSTR, name, NULL},
   {2, "port", DATATAG, FLDSTR, port, NULL},
   {1, "controller info", CLOSETAG, NULL, NULL, NULL},
   {0, "control data response", CLOSETAG, NULL, NULL, NULL},
   {NULL}
}



Скорее так:
...
...
{2, "name", DATATAG, FLDSTR, &name, NULL},
{2, "port", DATATAG, FLDSTR, &port, NULL},
...
...
Ведь name и port это скорее всего переменные в которые ты хочешь принять их значения.

И все же еще один вопрос.
Судя по приведенному примеру имеем n каких то контроллеров, которые имеют каждый несколько
входов и выходов /судя по примеру нас интересует получение от них данных/.
/все же твой пример аналогичен диалоговой форме. Имеется какое-то число short type; их типов.
Наименование которой находится в char tag[32]; и конечно каждая из них имеет свой
набор полей/
Если это не так, то приведи пожалуйста пример rsp_descr скажем у которого max значение уровня == 4.
Конечно понимаю, что ты сейчас можешь скажем в node <name> и <port> добавить новые ветки ...

Вообщем то идея понятна.
Возьмем к примеру исходники редактора notepad++.
Его автор сохраняет опции в одном или нескольких xml и при инициализации редактора
имеем код на C++ в 4000 строк, который рутинно обрабатывает все nodes из разных xml и
перекладывает их в структуры?
Ты это дело хочешь решить путем имея description этих xml иметь алгоритм, который будет генерировать
тот код, который будет выполнять те же действия, что и ручное кодирование /на примере notepad++/.
Оно?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974693
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivdj_ravenИ просьба, если не знаете таких библиотек, то луче ничего не пишете, а не пытайтесь меня убедить, что их не может быть в принципе :) Если я её не найду, я её просто напишу сам

я уверен, что библиотека ваша была доморощенная.

в то, что ты ее напишешь, я лично не верю, потому что иначе уже бы написал - там реально делать нечего.

но ты похоже на делфи программировал.
Написал, если бы было время. За 7 часов, в лучшем случае, в месяц много не напишешь. А мне по этому проекту есть еще чем заняться. Сам ты на делфи писал
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974694
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилСтранный какой-то XML - с пробелами в именах элементов
da kakaja raznica, eto primer.
Модератор: транслит на форуме под запретом.
...
Наезды удаляем.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974695
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Ты это дело хочешь решить путем имея description этих xml иметь алгоритм, который будет генерировать
тот код, который будет выполнять те же действия, что и ручное кодирование /на примере notepad++/.
Оно? Хотелось бы услышать мнение об этой идее ...

Правда эта идея разделяется на две ветки:

1) Генерировать C++ код на основании descriptions xml

2) Выполнять эти действия в run-time режиме

Соответственно и подход к реализации library будет совершено разным.

PS: Скорее всего возможна реализация и 1) и 2) подхода.
Не исключаю, что желательно иметь две library ...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974700
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Генерировать C++ код на основании descriptions xml
Речь идет не об том descriptions, который привел автор topic.

PS: Если эта тема интересна, то может быть новый topic создать?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974722
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenИзопропилСтранный какой-то XML - с пробелами в именах элементов
da kakaja raznica, eto primer.
в примере необязательно делать грубые ошибки
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38974753
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven,

я за пять минут набросал в Visual Studio пример с использованием XmlInspector :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
#include "stdafx.h"
#include "XmlInspector/XmlInspector.hpp"
#include <iostream>

void ConversionFunction(short value)        { std::cout << value << std::endl; }
void ConversionFunction2(std::string value) { std::cout << value << std::endl; }

void parse()
{
	Xml::Inspector<Xml::Encoding::Utf8Writer> inspector("test.xml");

	while (inspector.Inspect())
	{
		if (inspector.GetInspected() == Xml::Inspected::StartTag)
		{
			if (inspector.GetName() == "controllers") {
				inspector.Inspect();
				int ctrlcnt = std::stoi(inspector.GetValue());
				ConversionFunction(ctrlcnt);
			}
			else if (inspector.GetName() == "name") {
				inspector.Inspect();
				std::string name = inspector.GetValue();
				ConversionFunction2(name);
			}
			else if (inspector.GetName() == "port") {
				inspector.Inspect();
				std::string port = inspector.GetValue();
				ConversionFunction2(port);
			}
		}
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	parse();
	return 0;
}



XML
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="utf-8"?>
<control_data_response>
  <controllers>1</controllers>
  <controller_info>
    <name>ZX1</name>
    <port>COM1</port>
  </controller_info>
</control_data_response>



Вот и нахрена тут дополнительные структуры наподобие xml_struct?
А то, что описано в "таблице" rsp_descr, намного проще выразить в виде if'ов.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38975713
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven,

ну что там, есть подвижки? Просто хочется разобраться, для чего же понадобился такой способ описания.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
   {0, "control data response", OPNTAG, NULL, NULL, NULL},
   {1, "controllers", DATATAG, FLDSHRT, (char*) &ctrlcnt, NULL},
   {1, "controller info", OPNTAG, NULL, NULL, NULL},
   {2, "name", DATATAG, FLDSTR, name, NULL},
   {2, "port", DATATAG, FLDSTR, port, NULL},
   {1, "controller info", CLOSETAG, NULL, NULL, NULL},
   {0, "control data response", CLOSETAG, NULL, NULL, NULL},


Вот я опять смотрю на это и удивляюсь.
Получается, что нужно вручную указать уровень вложенности каждого узла. Зачем? А если уровней будет десяток или больше? Ведь элементарно можно ошибиться.
Также нужно указывать открывающие и прочие тэги. Зачем?! Особенно закрывающие - какая обработка предполагается для них? А если тэгов тысячи - все их описывать?!!

Вообще, это наводит на сильные подозрения, что это автосгенерированный код. Какая-то утилита по образцовому xml выдаёт это дело, потом по нему происходит парсинг. Гм, всё равно сложно - лишние движения.

А вот указание типов узлов: FLDSHRT, FLDSTR - наводит на мысли, что таким образом производится валидация входных данных. Но опять же - зачем такой способ? Если действительно нужна валидация, то следует использовать стандартные способы: делаем XmlSchema и берём валидирующий парсер.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38975812
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikПросто хочется разобраться, для чего же понадобился такой способ описания.
Идея у автора правильная /на его реализацию не обращайте внимания. Более важна сама идея./

Повторю то, что ранее уже было сказано.

Возьмем к примеру исходники редактора notepad++.
Его автор сохраняет опции в одном или нескольких xml и при инициализации редактора
имеем код на C++ в 4000 строк, который рутинно обрабатывает все nodes из разных xml и
перекладывает их в структуры.

Так вот автор не хочет в ручную писать эти 4000 строк, в имея некий description входящих xml и имея некую
функцию, которой передается description xml принять данные из xml и разложить полученные в некоторые
переменные, структуры, массивы ...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38975897
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Так вот автор не хочет в ручную писать эти 4000 строк, в имея некий description входящих xml и имея некую
функцию, которой передается description xml принять данные из xml и разложить полученные в некоторые
переменные, структуры, массивы ...

обычная десериализация
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38975929
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилобычная десериализация
Безусловно.
Но изюминка идеи автора topic в том, что берем "чужой" xml/s/, подготавливаем description и подаем
на вход некоторой функции, которая умеет принять данные и разложить в нужные места.

PS: Как по мне идея неплохая и если ее воплотить в library /имеющей хорошо продуманный description .../,
то можно было бы сэкономить не мало времени ...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38976197
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Так вот автор не хочет в ручную писать эти 4000 строк
Э, не! Автор как раз вручную описывает все тысячи строк! Даже более того - он описывает каждый тэг: и открывающий, и закрывающий! С учётом уровня вложенности! Это ж опупеть можно, вручную это подсчитывать!
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984288
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvikВладимир2012 Так вот автор не хочет в ручную писать эти 4000 строк
Э, не! Автор как раз вручную описывает все тысячи строк! Даже более того - он описывает каждый тэг: и открывающий, и закрывающий! С учётом уровня вложенности! Это ж опупеть можно, вручную это подсчитывать!Задела меня эта тема, что то в ней есть.
Конечно предложенный подход автора к реализации его идеи очень коряво смотрится.
Но идея, то у него не плохая.
Хотелось бы все же понять почему участников форума эта идея не заинтересовала?
В основном все проекты которые используют xml файлы работают с ними в стиле notepad++.
Сериализация/десериализация в xml классов годится для "своих" проектов, а как эффективно с наименьшей
затратой времени работать с чужими xml?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984311
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012а как эффективно с наименьшей
затратой времени работать с чужими xml?
а в чём отличие от своего?

если сильно непотребен - XSLT преобразование
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984395
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Хотелось бы все же понять почему участников форума эта идея не заинтересовала?


Потому что это бред. XML нельзя отобразить в память программы в виде массива структур.
Можно в виде дерева структур, это -- DOM

Владимир2012 В основном все проекты которые используют xml файлы работают с ними в стиле notepad++.


Это как ? Я не понял нифига.


Владимир2012 Сериализация/десериализация в xml классов годится для "своих" проектов, а как эффективно с наименьшей
затратой времени работать с чужими xml?

Ну, DOM, SAX. SAX нужен для большого и простого XML, DOM -- для сложного и маленького.

Та "идея", что была у ТС, на самом деле легко и просто за 30 минут реализуется на любом SAX-парсере.
Я лично не понимаю, ни что тут сложное, ни что тут интересное.

Единственный вопрос, который мне интересен в контексте XML+C++ -- это какую библиотеку использовать для С++ для
разбора XML. Библиотек много, но все разные, и не все кроссплатформные, а мне бы хотелось иметь одно решение на все случаи жизни.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984489
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМожно в виде дерева структур, это -- DOM
После parsing конечно имеем некое "дерево структур" - DOM, но в его в nodes данные обычно представлены в виде текста.
Навряд ли это нас устроит.
Поэтому мы обычно выбираем из nodes нужные нам данные и приводим их к native представлению их в программе.
Т.е. перемещаем их в переменные, структуры, вектора, ...

Возьмем к примеру stylers.xml /один из конфигурационных файлов notepad++/.

<LexerStyles>
<LexerType name="actionscript" desc="ActionScript" ext="">
<WordsStyle name="DEFAULT" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="FUNCTION" styleID="20" fgColor="95004A" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type2" />
<WordsStyle name="PREPROCESSOR" styleID="9" fgColor="804000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="INSTRUCTION WORD" styleID="5" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" keywordClass="instre1" />
<WordsStyle name="TYPE WORD" styleID="16" fgColor="8000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type1" />
<WordsStyle name="NUMBER" styleID="4" fgColor="FF8000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="STRING" styleID="6" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="CHARACTER" styleID="7" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="OPERATOR" styleID="10" fgColor="000080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
<WordsStyle name="VERBATIM" styleID="13" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
<WordsStyle name="REGEX" styleID="14" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
<WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="COMMENT LINE" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="COMMENT DOC" styleID="3" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="COMMENT LINE DOC" styleID="15" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
<WordsStyle name="COMMENT DOC KEYWORD" styleID="17" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
<WordsStyle name="COMMENT DOC KEYWORD ERROR" styleID="18" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
</LexerType>

...
...

Как поступает автор для принятия этих данных из xml /понятно он не в "лоб" парсит его, а использует готовый парсер - SimpleXML/.
Стантартно.
И так наша задача принять данные из stylers.xml и представить их в native представлении программы.
В notepad++ native представление данных из stylers.xml представленно в:
struct StyleArray
struct LexerStyler : public StyleArray
struct LexerStylerArray

Далее автор пишет функцию /в notepad++ это bool NppParameters::feedStylerArray(TiXmlNode *node)/,
которая из DOM вытаскивает данные и помещает в один или несколько векторов.
Вроде все логично, правильно и не сложно.
Но такой подход принятия данных предопределяет разработку множества функций для принятия из xml логически, связанных данных.
В notepad++ такой подход предопределяет написания порядка 4000 строк кода /см. Parameters.cpp и Parameters.h/, а это уже довольно трудоемко.

Как же можно решить подобную задачу проще?

1-й подход - кодогенерация

В программе определяем некоторые meta данные об переменных, структурах, векторах ... в которые нужно принять данные.
Далее подаем на вход кодогенератору эти метаданные и он на основе этих данных выдает нам готовый C++ код, который
мы просто затем copy/paste в свою программу /например в GetDataFromXML.cpp/.

2-й подход - run time принятие данных.

Этот подход мне больше нравится, но его реализация будет скорее всего намного сложнее.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984504
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivБиблиотек много, но все разные, и не все кроссплатформные, а мне бы хотелось иметь одно решение на все случаи жизни.
Меня пока вполне устраивает http://sourceforge.net/projects/tinyxml/files/
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984526
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не будет его, решения на все случаи жизни. Потому что разные библиотеки заточены под разные юзкейсы; что удобно использовать на одной платформе — неприемлемо на другой, где-то требуется скорость, где-то соблюдение всех стандартов, где-то трансформации, и так далее.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984630
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте я озвучу навскидку задачку. (Задаче не всеобъемлющая и не охватывает весь спектр XML анализа
но ее достаточно чтобы оценить первые недостатки предлагаемой технологии (к примеру хардкод, бойлерплейт,
негибкость))

Есть документ (угадайте откуда):

Код: xml
\r\n    ....\r\n    <tr style="vertical-align:top">\r\n      <td style="width:15%" class="msgBody">\r\n       <img src="http://www.gravatar.com/avatar/1c17f803bcb0d2e75ddac01823c66df1?d=mm&s=50" style="width:50px;height:50px;padding-bottom:5px"/><br/>\r\n       <a href="RWolf">\r\n       RWolf </a>\r\n\r\n      <font style="color:#888;">Member</font>\r\n\r\n      \r\n\r\n      <span class="smallInfo">Откуда: Казань\r\n\r\n\tСообщений: 263<br/></span>\r\n      \r\n       </td>\r\n\r\n        <td class="msgBody">\r\n            А не будет его, решения на все случаи жизни. Потому что разные библиотеки заточены под разные юзкейсы; что удобно использовать на одной платформе — неприемлемо на другой, где-то требуется скорость, где-то соблюдение всех стандартов, где-то трансформации, и так далее. \r\n\r\n\r\n        </td>\r\n    </tr>\r\n
\r\n

Необходимо
1) Сформировать plain-text вида.

Код: plaintext
\r\nRWolf \r\n====\r\n\r\n А не будет его, решения на все случаи жизни. Потому что разные библиотеки заточены под разные юзкейсы; что удобно использовать на одной платформе — неприемлемо на другой, где-то требуется скорость, где-то соблюдение всех стандартов, где-то трансформации, и так далее. \r\n
\r\n
2) Сформировать копию исходного документа но с фильтрацией всех сообщений от зобаненных.

3) Сформировать CSV документ для импорта данных форума в другую БД. К примеру.

Код: plaintext
\r\n# NAME; FROM; MSGS; TEXT\r\nRWolf;Казань;263;А не будет его, решения на все случаи жизни....\r\n
\r\n
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984710
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Как же можно решить подобную задачу проще?

1-й подход - кодогенерация

В программе определяем некоторые meta данные об переменных, структурах, векторах ... в которые нужно принять данные.
Далее подаем на вход кодогенератору эти метаданные и он на основе этих данных выдает нам готовый C++ код, который
мы просто затем copy/paste в свою программу /например в GetDataFromXML.cpp/.


Именно кодогенерация. По схеме данных (WSDL) генерируется структура на С(++) и сериализаторы и десериализаторы для них.
См. например gSOAP.

Владимир2012 2-й подход - run time принятие данных.


Это как ?

Хотя, мне лично эта тема неинтересна от слова "совсем", поэтому...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984712
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012MasterZivБиблиотек много, но все разные, и не все кроссплатформные, а мне бы хотелось иметь одно решение на все случаи жизни.
Меня пока вполне устраивает http://sourceforge.net/projects/tinyxml/files/

TinyXML традиционно не поддерживал никогда namespaces, уже стал ?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984715
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfА не будет его, решения на все случаи жизни. Потому что разные библиотеки заточены под разные юзкейсы; что удобно использовать на одной платформе — неприемлемо на другой, где-то требуется скорость, где-то соблюдение всех стандартов, где-то трансформации, и так далее.

Это почему это не будет ?
В Java есть такие библиотеки, универсальные, переносимые, быстрые, с какого лешего им не быть под C++ ?
В BOOST много библиотек есть, почему бы туда не запихать ещё и XML ?
(кстати, надо поглядеть, что там на этот счёт).
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984716
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Это НЕ XML!
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984735
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivTinyXML традиционно не поддерживал никогда namespaces, уже стал ? Выдержка из TinyXML-2 http://www.grinninglizard.com/tinyxml2/
"... 4. More modern C++, including a proper namespace."
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984737
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012MasterZivTinyXML традиционно не поддерживал никогда namespaces, уже стал ? Выдержка из TinyXML-2 http://www.grinninglizard.com/tinyxml2/
"... 4. More modern C++, including a proper namespace."

Неймспейсы в XML, а не в C++!
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984745
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012MasterZivTinyXML традиционно не поддерживал никогда namespaces, уже стал ? Выдержка из TinyXML-2 http://www.grinninglizard.com/tinyxml2/
"... 4. More modern C++, including a proper namespace."

Потом, это -- другая библиотека, TinyXML2.
Ну и заявы автора как-то пугают... (No STL requirement, например... Зачем ? И что вместо std::string ?)
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984747
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Потому, что разные задачи предъявляют к парсеру противоречивые требования. Допустим, библиотека, разворачивающая документ целиком в DOM, не сможет парсить большие XML из-за исчерпания памяти, SAX-парсер не сможет модифицировать документ, а на эмбеддед-платформах просто недостаточно ресурсов для универсальных парсеров.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984751
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте я озвучу навскидку задачку.
На JavaScript эта задача не сложно решается.
В topic Создании wrappers /interfaces/ над некоторыми libraries из MSDN не ручным кодированием http://www.sql.ru/forum/1140490/sozdanii-wrappers-interfaces-nad-nekotorymi-libraries-iz-msdn-ne-ruchnym-kodirovaniem
Использовал связку JavaScript+PHP для получения *.cpp, *.h и *.idl.
C++ не использовал потому, что сама постановка задачи не требовала высоких требований к скорости ...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984755
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfMasterZiv,

Потому, что разные задачи предъявляют к парсеру противоречивые требования. Допустим, библиотека, разворачивающая документ целиком в DOM, не сможет парсить большие XML из-за исчерпания памяти, SAX-парсер не сможет модифицировать документ, а на эмбеддед-платформах просто недостаточно ресурсов для универсальных парсеров.

Каждый парсер обязан поддерживать и DOM, и SAX.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984760
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Ну, я вот expat использую — не поддерживает DOM.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984770
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПотом, это -- другая библиотека, TinyXML2
Sorry.
TinyXML2 использую.

MasterZivНу и заявы автора как-то пугают... (No STL requirement, например... Зачем ? И что вместо std::string ?) Автор TinyXML2 считает это даже преимуществом.
Меня это особенно не волнует.
В конце концов ведь я получил от TinyXML2 нужный мне функционал ...
Будет чего не доставать допишу или скорее присмотрюсь к другому проекту.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984776
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RWolfMasterZiv,

Ну, я вот expat использую — не поддерживает DOM.

Я имел в виду, что я формулирую требования к будущей абстрактной библиотеке, которую я хочу найти.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984849
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivmayton,

Это НЕ XML!
Хм... верно. Дайте подумать. Найду другие данные.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984977
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто НЕ XML! Оно то так, только mayton то намекал на страницу из сайта http://www.sql.ru/ .
А она с чего начинается?
С
Код: plaintext
1.
2.
3.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984994
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonMasterZivmayton,

Это НЕ XML!
Хм... верно. Дайте подумать. Найду другие данные.

Кажется, достаточно там убрать <BR> -ы, и всё будет ок.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38984996
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЭто НЕ XML!
Да ты прав.
Валидацию в качестве xml страница с http://www.sql.ru/ не проходит.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985002
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012MasterZivЭто НЕ XML! Оно то так, только mayton то намекал на страницу из сайта http://www.sql.ru/ .
А она с чего начинается?
С
Код: plaintext
1.
2.
3.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



А это не важно, с чего начинается.
Главное, что оно не XML, а броузеру-то вообще по барабану, как теги закрывать.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985005
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВладимир2012пропущено...
Оно то так, только mayton то намекал на страницу из сайта http://www.sql.ru/ .
А она с чего начинается?
С
Код: plaintext
1.
2.
3.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



А это не важно, с чего начинается.
Главное, что оно не XML, а броузеру-то вообще по барабану, как теги закрывать.

Хотя, может я и неправ.
Надо валидировать по DTD, как это сделать быстро и легко -- я не знаю.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985014
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv Кажется, достаточно там убрать <BR> -ы, и всё будет ок.
Нужно убрать:
<br/>, <br /> и все блоки комментариев
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985017
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то вопрос интересный.
Интересно услышать правильный ответ.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985103
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Интересно услышать правильный ответ.
Получил валидный xml из страницы сайта http://www.sql.ru/, после
следующих замен /в целом по всей странице/:
- "&" на "&"

- "alt="">" на "alt=""/>"
Связано с тем, что "<img ... " не имеет валидного ">"

- " < " на "<"
Если user привел в комментах блок текста на C++

PS: Вообщем то если бы страница сайта удовлетворяла стандарту представления страниц типа xhtml,
то проблем бы вообще ни каких не было.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985143
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
> wget --spider -S  http://www.sql.ru/ 
...
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Cache-Control: private
  Content-Length: 29488
  Content-Type:  text/html ; charset=windows-1251
Выделено мною.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38985254
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Всё верно. Данный документ не является XML-валидным. Хедер появляется благодаря
забавному стечению обстоятельств или причудой веб-мастеринга (кстати не первой)
последние лет 10. Тот факт что не соблюдаются парность тегов или условия
вложенности похоже верстальщиков не беспокоит. Эдакая себе мимикрия. Браузер
хавает.

Для конверсии таких псевдо-XML ей я использовал HTMLCleaner http://htmlcleaner.sourceforge.net/
когда-то давно.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986095
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HTML, вообще-то и не разрабатывался как well-formed SGML - в нём масса послаблений, а задачей пользовательского агента является отображение контента, а не его валидация.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986107
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да но "шапка" у него вполне себе "боярская".
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986116
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мало ли что написано на заборе?
В паре text/html определяющим является первое слово, а все уточнения после косой черты можно интерпретировать как plain. Имеем полное право, хотя такую реализацию сложно назвать адекватной.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986357
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот более tru-шный xml. Созданный GPS-навигатором в окрестностях "лысой" горы.

Давайте возьмём его за основу как некое ТЗ и получим хотя-бы последовательность точек
широты и долготы.

50.4329464585,30.4889225028
е.t.c.

Разумеется с использованием табличного С++XML-парсера, и посмотрим на решение с высоты
тык-скыть возможных недостатков о которых мы так бурно говорили.

Автор не прячся. Подключайся к процессу.
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3" xmlns:wptx1="http://www.garmin.com/xmlschemas/WaypointExtension/v1" xmlns:gpxtpx="http://www.garmin.com/xmlschemas/TrackPointExtension/v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creator="eTrex 30" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd http://www.garmin.com/xmlschemas/GpxExtensions/v3 http://www8.garmin.com/xmlschemas/GpxExtensionsv3.xsd http://www.garmin.com/xmlschemas/WaypointExtension/v1 http://www8.garmin.com/xmlschemas/WaypointExtensionv1.xsd http://www.garmin.com/xmlschemas/TrackPointExtension/v1 http://www.garmin.com/xmlschemas/TrackPointExtensionv1.xsd">
  <metadata>
    <link href="http://www.garmin.com">
      <text>Garmin International</text>
    </link>
    <time>2015-05-11T17:25:38Z</time>
  </metadata>
  <trk>
    <name>Mountain</name>
    <extensions>
      <gpxx:TrackExtension>
        <gpxx:DisplayColorr>Yellow</gpxx:DisplayColor>
      </gpxx:TrackExtension>
    </extensions>
    <trkseg>
      <trkpt lat="50.4329464585" lon="30.4889225028">
        <ele>72.24</ele>
        <time>2015-05-11T10:50:54Z</time>
      </trkpt>
      <trkpt lat="50.4331701715" lon="30.4890732933">
        <ele>72.72</ele>
        <time>2015-05-11T10:51:09Z</time>
      </trkpt>
      <trkpt lat="50.4332992528" lon="30.4893878661">
        <ele>72.72</ele>
        <time>2015-05-11T10:51:24Z</time>
      </trkpt>
...
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986371
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

документ не валидный, тэги не закрыты
Чтобы не было разногласий, наверно нужно сразу договориться, что далее идут три закрывающих тэга:
Код: xml
1.
2.
3.
    </trkseg>
  </trk>
</gpx>


Оно, конечно, понятно, но копья ломаются и не по таким поводам.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986373
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik, я не аттачил весь документ. Он слишком велик для форума.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986376
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petalvik, кстати это прекрасный повод обсудить поведение поточного (streamable) XML-парсера.

Как ты думаешь. А?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986470
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте возьмём его за основу как некое ТЗ и получим хотя-бы последовательность точек
широты и долготы.
Сразу говорю это всего лишь первый эскиз ...

Скорее всего должен быть некий tools, который проанализировав xml создаст meta данные

"<metadata>", "class"

"<link>", "struct"
"href", "URL"
"text", "string"
"</link>"

"time", "time"

"/<metadata>"

"<trk>", "class"

"name", "string"

"<extensions>", "struct"

"<gpxx:TrackExtension>", ""
"gpxx:DisplayColorr", "string"
"</gpxx:TrackExtension>"

"/<extensions>"

"<trkseg>", "vector"

"<trkpt>", "struct"
"lat", "double"
"lom", "double"
"ele", "double"
"time", "time"
"</trkpt>"

"</trkseg>"

"</trk>"
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986747
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Сразу говорю это всего лишь первый эскиз ...

Скорее всего должен быть некий tools, который проанализировав xml создаст meta данные

Зачем тулз? Я говорю об обыкновенном usecase анализатора о котором писал топик-стартер.

Разве он что-то говорил о тулзе?

Давайте хором сядем и напишем этот юзкейс и осмотрим и обгрызём со всех сторон его
чтоб понять все недостатки предлагаемой методики. Я нарочно взял простой документ
где нет контекста и отношения parent-child между тегами не меняют семантики.
Он плоский. По сути это CSV.

Нам даже не важна вложенность. Можем обрабатывать только события открытия тега trkpt
и его атрибутов. И игнорировать всё остальное.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986763
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0637maytonЗачем тулз?
Вообщем то согласен.
Для начала можно потренироваться на "ручных" meta данных, а затем уже навесить всяких "рюшечек" /например tools .../.

Как тебе видится формат представления meta данных /авторский мне что-то не сильно нравится/?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38986840
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моё видение будет полным когда я увижу usecase. К сожалению
у меня есть опасение что я что-то не увидел красивое и прекрасное
в идеях автора и поэтому хочу постоять в сторонке и посмотреть
как мемберы это реализуют а потом уж высказать свою ИМХУ.
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38987137
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавайте хором сядем и напишем этот юзкейс и осмотрим и обгрызём со всех сторон его
чтоб понять все недостатки предлагаемой методики. Я нарочно взял простой документ
где нет контекста и отношения parent-child между тегами не меняют семантики.
Он плоский. По сути это CSV.

Нам даже не важна вложенность. Можем обрабатывать только события открытия тега trkpt
и его атрибутов. И игнорировать всё остальное.

У меня сразу были мысли в этом же направлении. Плоский документ обрабатывать легко хоть с помощью StAX-парсера (пример с которым я привёл), хоть задавая способ его обработки "таблицей" (способ автора).
Но даже с простым изначальным xml мне пришлось вызывать Inspect отдельно в каждой ветке if, для продвижения к содержимому узла. При этом не сделана проверка на возможные ошибки. Добавить их - код разрастётся.

А вот если будут сложные отношения между узлами, да хотя бы узлы с одинаковыми именами на разных уровнях вложенности - тут становится интересней. Например, вот в этой теме пытаются задать схему для сложных связей. Чтобы проверять подобные связи при парсинге - нужен уже не простой однопроходный парсер. Ну или придётся сохранять значения и реагировать далее по ходу разбора.
Впрочем, валидация - это, наверное, отдельная тема.

Способ автора. Тут тоже много проблем.
Если версия документа меняется - добавляются/удаляются узлы, изменяется их вложенность, то нужно будет вручную в "таблице" изменять параметры - легко запутаться. А ошибка выявится лишь в рантайме. Имхо, неудобный это способ.
Опять же, неясно, как задавать неймспейсы, буде они в xml.

И да, хотелось бы увидеть юзкейс.
Я всё-таки думаю, что эта "таблица" - выхлоп кодогенератора.


Вот тут 17774948 Владимир2012 писал:Владимир2012 2-й подход - run time принятие данных.

Этот подход мне больше нравится, но его реализация будет скорее всего намного сложнее.
Это сложно в нативных языках. А, например, в .NET XmlSerializer так и работает: в рантайме, пользуясь метаданными, создаёт парсер на лету (однако, можно и предварительно создать нужную сборку, для повышения производительности), и десериализует данные из xml в набор классов (который можно предварительно автоматически сгенерировать).
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38987202
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодогенератор это что? Взять xml-схему из шапки - и накидать over 9000 функций
которые на самом деле не нужны и представляют собой некую "возможность" ?

Для моей задачи которую я озвучил. То бишь получить список географических координат
какая польза в кодо-генераторе?
...
Рейтинг: 0 / 0
Xml parser библиотека для C/C++
    #38987280
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКодогенератор это что? Взять xml-схему из шапки - и накидать over 9000 функций
которые на самом деле не нужны и представляют собой некую "возможность" ?
Можно придумывать десятки разных кодогенераторов, которые будут разными путями решать задачи перевода
данных из xml представления в native формат программы.
Вот экспромтом приведу два варианта.

1-й вариант
--------------
Согласно meta данных генерируется код в стиле notepad++ /см. Parameters.cpp и Parameters.h/.
Это вполне реально сделать.

2-й вариант
--------------
Кодогенератор не создает дюжину функций, а формирует "плоский" код.
Т.е. анализируем meta данные и формируем код для каждой логического блока meta данных.

Что такое логический блок?
Как говорится "Лучше один раз увидеть, чем сто раз услышать"

---------- Логический блок -------------------

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
"<metadata>", "class"

"<link>", "struct"
"href", "URL"
"text", "string"
"</link>"

"time", "time"

"/<metadata>" 



---------- Логический блок -------------------
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
"<trk>", "class"

"name", "string"

"<extensions>", "struct" 

"<gpxx:TrackExtension>", ""
"gpxx:DisplayColorr", "string"
"</gpxx:TrackExtension>"

"/<extensions>"

"<trkseg>", "vector"

"<trkpt>", "struct"
"lat", "double"
"lom", "double"
"ele", "double"
"time", "time"
"</trkpt>"

"</trkseg>"

"</trk>"



В приведенный пример meta данных надо правда добавить данные об native данных в которые нужно
поместить данные из xml.
Задача вполне решаема, но скорее всего потрудиться для ее реализации придется не мало.

В чем выгода?
Программист не будет "вручную" выписывать 4000 строк ...
Скажу ранее был позитивный опыт разработки генератора отчетов, который на основании meta данных генерировал
исходный текст программы, которая позволяла сформировать отчет.
Честно скажу - не жалею о проделанной работе /сэкономил в разы больше времени, чем потратил на разработку/.

PS: "Искусство требует жертв".
...
Рейтинг: 0 / 0
83 сообщений из 83, показаны все 4 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Xml parser библиотека для C/C++
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]