Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 63, средняя оценка - 4.78
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Парсинг XML - C++

11.10.2011, 07:03. Просмотров 9498. Ответов 37
Метки нет (Все метки)

Как его на плюсах лучше сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2011, 07:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Парсинг XML (C++):

Парсинг xml - C++
При написание парсера возникла проблема, как интерпретировать следующий xml <?xml version="1.0" ?> <note item="description"> ...

Парсинг кодировки в начальном теге xml - C++
Есть строка <?xml version="1.0" encoding="UTF-8"?>, <?xml version="1.0" encoding="ANSI-1251"?>, или любая другая, начинающаяся на <?xml....

Парсинг - C++
Всем доброго времени суток. Только начал изучать c++ и нужна помощь. Есть код, нужно сделать парсинг. Не понимаю , что это и как его...

Парсинг - C++
Привет всем вообщем нужно удачно спарсить данные (gold, money, fuel, lvl, model) вид ответа хоть и xml но данные к сожалению находятся не в...

Парсинг - C++
Привет всем ) Есть небольшая проблема например имеется переменная String t = '<img src="http://site.ru/u3124123/d_hwre2.jpg"/>...

Парсинг строки - C++
Добрый день. Помогите с решением следующей задачи. На вход идет строка из 0 и 1, например, 110100011, нужно распарсить её на составляющие....

37
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 08:00 #2
taras atavin, Ну тут наверное два нормальных варианта
1. найти парсер
2. использовать регулярные выражения.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 08:08  [ТС] #3
Цитата Сообщение от vitaly1981 Посмотреть сообщение
1. найти парсер
Под свои теги? Вопрос именно как лучше делать, а в плане "найти" возможен только образец парасера, то есть найти, посмотреть и сдалеть по аналогии. И слово "лучше" в вопросе не случайно. Потому что как нибудь сделать парсер я могу и самостоятельно, но не факт, что не потрачу на первый парсер в разы больше времени, чем обычно занимает десятый.
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 08:16 #4
taras atavin, Да, под свои тэги....но это надо искать библиотеки, например в Qt есть неплохой парсер.
"Лучше" понятие растяжимое....проще использовать парсер какой либо библиотеки.....да и надежнее в некоторых случаях. Ну а если ты разбираешься в регулярных выражениях, то парсер через них делается на раз....
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 08:21  [ТС] #5
Цитата Сообщение от vitaly1981 Посмотреть сообщение
"Лучше" понятие растяжимое
Критерии:
1. Время разработки.
2. Время и простота модификации при изменении тегов.
Поддержка атрибутов не требуется врообще, так как их можно заменить тегами. Например, вместо
XML
1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<book>
<electode material="графит">
<x>1</x>
<y>2</y>
<z>4</z>
</electode>
</book>
будет
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<book>
<electode>
<material>графит</material>
<x>1</x>
<y>2</y>
<z>4</z>
</electode>
</book>
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 08:26 #6
Время разработки:
готовый парсер -зависит от парсера, но обычно минимальная
регулярные выражения - зависит от твоего знания построения регулярных выражений (в случае хорошего знания данного предмета, разработка может быть быстрее чем с готовым парсером)
Простота модификации:
готовый парсер - обычно очень простая
регулярные выражения - зависит от тех регулярных выражений, которые напишешь.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 08:35  [ТС] #7
Цитата Сообщение от vitaly1981 Посмотреть сообщение
"Лучше" понятие растяжимое
Критерии:
1. Время разработки.
2. Время и простота модификации при изменении тегов.
За исключением тега <xml> поддержка атрибутов не требуется врообще, так как их можно заменить тегами. Например, вместо
XML
1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<book>
<electode material="графит">
<x>1</x>
<y>2</y>
<z>4</z>
</electode>
</book>
будет
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0"?>
<book>
<electode>
<material>графит</material>
<x>1</x>
<y>2</y>
<z>4</z>
</electode>
</book>
Добавлено через 1 минуту
А предложить образец можете? А то гугл чего то не хочет.
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 08:41 #8
taras atavin, С атрибутами лучше смотрится и экономнее....

Добавлено через 3 минуты
Ну вот небольшой пример распознавания через регулярное выражение:
C++
1
2
3
4
QRegExp rx("<create>(.*)</create>");
    rx.setMinimal(true);
    int nomC=0;pos=0;
    while((pos=rx.indexIn(msg,pos))!=-1) {create[nomC]=rx.cap(1);pos+=rx.matchedLength();nomC++;}
Добавлено через 1 минуту
Ну это только Qtшные функции используются, на C++ будет похоже.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 08:45  [ТС] #9
Цитата Сообщение от vitaly1981 Посмотреть сообщение
taras atavin, С атрибутами лучше смотрится и экономнее....
И добавляет вопрос о выборе между тегом и атрибутом в каждом конкретном случае. Одними тегами будет проще.

Добавлено через 1 минуту
Цитата Сообщение от vitaly1981 Посмотреть сообщение
QRegExp
Это из Qt?
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 08:46 #10
taras atavin, Да ну....отлавливаешь содержимое тэга и разбираешь атрибуты, главное правильно регулярное выражение составить...а можно вообще универсальный распознаватель сделать....

Добавлено через 44 секунды
Да, в других библиотеках подобные функции есть и примерно так же используются..
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 08:53  [ТС] #11
Предположим, нашёл я символ "<". С него начинается открывающий тег, заканчивается символом ">". Раз нет атрибытов, то не надо искать пробел после букв, надо найти сразу ">". Нашёл? Эйси, границы открывающего тега известны. А где к нему парный закрывающий? И соответсвенно где границы элемента? Искасть следующую пару с теми тегом внутри и подстрокой "</" вместо символа "<"? А допускается ли вообще вложение тега в такой же? То есть
Код
<teg1>
<teg2>Текст</teg2>
<teg3>
<teg1>Текст</teg1>
</teg3>
</teg1>
? И как быть в этом случае? Нашли "<", потом ">", между ними прочитали "teg1", ищём "</teg1>" и находим первый "</teg1>" вместов торого. Счётчик? Или это вообще не валидно и поддерживаться не должно? И можно ли вообще менять семантику тега в зависимости от того, куда он влдожен?
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 08:58 #12
taras atavin, Если ты будешь использовать регулярные выражения, то посимвольно тебе ничего искать не нужно будет, ты получишь все готовенькое, если выражение грамотно составишь.
Какие функции для регулярных выражений использовать поищи в сети, материалов много, я так с ходу не помню, нужно смотреть. На счет вложений, тут как выражение составишь так и будет.
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 08:59  [ТС] #13
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Да... в других библиотеках подобные функции есть и примерно так же используются..
. Найди ка у меня слово "библиотека". Не нашёл? Эйси. А почему решил, что я их просил? Или без них совсем фигово?
0
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
11.10.2011, 09:03 #14
taras atavin, Даже когда ты пишешь на "чистом С++", ты используешь различные библиотеки...

Добавлено через 2 минуты
Сам по себе С++ ни о каких регулярных выражениях не знает...
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.10.2011, 09:06  [ТС] #15
Цитата Сообщение от vitaly1981 Посмотреть сообщение
taras atavin, Даже когда ты пишешь на "чистом С++", ты используешь различные библиотеки...
GDI тоже библиотека? Согласен. Именно парсинг совсем фигово делать без библиотек?

Добавлено через 2 минуты
Цитата Сообщение от vitaly1981 Посмотреть сообщение
Сам по себе С++ ни о каких регулярных выражениях не знает...
Это можно не объяснять. Но delphi их тоже не знает, что не помешало моему коллеге сделать парсинг не xml с разбором на подстроки по определённым правилам. В явном виде там не было регулярок, а в постановке были.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2011, 09:06
Привет! Вот еще темы с ответами:

Рекурсивный парсинг - C++
Есть формат на базе XML. 1. Файл начинается с &lt;?xml version=&quot;...&quot; encoding=&quot;ANSI...&quot;?&gt; 2. Поддерживается единственная кодировка только...

Парсинг списка - C++
Есть список(char): id@in;in;in;in@salt@rand:price:count/key, id@in;in;in;in@salt@rand:price:count/key, ...

Парсинг шрифтов - C++
Всем привет. Вот заинтересовала тема о шрифтах, подскажите пожалуйста литературу по шрифтам, хотелось бы научиться считывать файл шрифта...

Парсинг текста - C++
Снова здравствуйте вообщем делаю Post запрос на который приходит ответ вида ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
11.10.2011, 09:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru