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

Анализ данных XML-документа - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 84, средняя оценка - 4.81
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
21.06.2008, 15:58     Анализ данных XML-документа #1
Помогите с программой.
Нужно считать числовые данные(цена, частота мин, частота макс) из XML-документа в двухмерный массив и записать этот массив в текстовый файл. Вот XML

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<headphones id="id1">
<title>Technics</title>
<Characteristic amount="24" unit="доллар">Цена</Characteristic>
<Characteristic amount="20" unit="герц">Частота мин</Characteristic>
<Characteristic amount="27" unit="кгерц">Частота макс</Characteristic>
</headphones>
<headphones id="id2">
<title>Sennheiser</title>
<Characteristic amount="29" unit="доллар">Цена</Characteristic>
<Characteristic amount="20" unit="герц">Частота мин</Characteristic>
<Characteristic amount="20" unit="кгерц">Частота макс</Characteristic>
</headphones>
<headphones id="id3">
<title>AKG</title>
<Characteristic amount="95" unit="доллар">Цена</Characteristic>
<Characteristic amount="15" unit="герц">Частота мин</Characteristic>
<Characteristic amount="22" unit="кгерц">Частота макс</Characteristic>
</headphones>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2008, 15:58     Анализ данных XML-документа
Посмотрите здесь:

Анализ данных строки C++
Анализ числовых данных. C++
Необходимо провести анализ следующей последовательности данных: C++
Анализ данных C++
ПОМОГИТЕ получить аттрибуты из XML документа, через DOM на VC++ C++
Visual C++ Модель XML документа, представление в виде дерева
C++ Необходимо создать двумерный массив с количеством строк равным количеству полученных узлов xml документа.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2008, 17:15     Анализ данных XML-документа #2
Вы хотите сказать, что этот док парсится? :eek:
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
21.06.2008, 17:41  [ТС]     Анализ данных XML-документа #3
не проверял, этот док писал по аналогии с теорией
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2008, 17:52     Анализ данных XML-документа #4
А теория не шепнула Вам, что корневой элемент должен быть один? Ваш файл только с помощью fopen и прочих можно читать. Он не будет парситься. "Учи матчасть."
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
21.06.2008, 17:55  [ТС]     Анализ данных XML-документа #5
исправил

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<headphones>
<unit1>
  <title>Technics</title>
  <Characteristic amount="24" unit="доллар">Цена</Characteristic>
  <Characteristic amount="20" unit="герц">Частота мин</Characteristic>
  <Characteristic amount="27" unit="кгерц">Частота макс</Characteristic>
</unit1>
<unit2 >
  <title>Sennheiser</title>
  <Characteristic amount="29" unit="доллар">Цена</Characteristic>
  <Characteristic amount="20" unit="герц">Частота мин</Characteristic>
  <Characteristic amount="20" unit="кгерц">Частота макс</Characteristic>
</unit2>
<unit3>
  <title>AKG</title>
  <Characteristic amount="95" unit="доллар">Цена</Characteristic>
  <Characteristic amount="15" unit="герц">Частота мин</Characteristic>
  <Characteristic amount="22" unit="кгерц">Частота макс</Characteristic>
</unit3>
</headphones>
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2008, 20:20     Анализ данных XML-документа #6
Накатал примерчик:
C++
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
40
41
42
43
44
45
46
47
#include<stdio.h>
#include<string.h>
#include<libxml/parser.h>
#include<libxml/tree.h>
 
xmlDocPtr doc = NULL;//указатель на документ
FILE *f;
 
void rec(xmlNodePtr node)
{
   xmlNodePtr cur_node = node;
   while (cur_node)
   {
//в этом цикле проверяется соотвествие тому, что мы на узел попали
//затем что это узел "Characteristic"
      if ((cur_node->type == XML_ELEMENT_NODE) &&
         (strcmp(cur_node->name, "Characteristic") == 0))
      {
         xmlAttrPtr attr = cur_node->properties;//берем атрибут...
         fprintf(f, "\n\nCharacteristics of %s %s ", cur_node->parent->name, xmlNodeGetContent(cur_node));
         while(attr)
         {
            fprintf(f," %s", attr->children->content);
            attr = attr->next;//наследующий атрибут
         }
      }
      rec(cur_node->children);
      cur_node = cur_node->next;
   }
}
 
int main(int argc, char **argv)
{
   LIBXML_TEST_VERSION;//это для компилера...
   doc = xmlReadFile(argv[1], NULL, 0);//парсим наш файл
   if(doc == NULL)
   {
      printf("Error parsing file %s\n", argv[1]);
      exit(1);
   }
   xmlNodePtr root = xmlDocGetRootElement(doc);//берем корневой элемент
   f = fopen("onefile","w");
   rec(root);
   fclose(f);
   xmlFreeDoc(doc);
   return 0;
}
В файле получаем:
Код
Characteristics of unit1 Цена  24 доллар

Characteristics of unit1 Частота мин  20 герц

Characteristics of unit1 Частота макс  27 кгерц

Characteristics of unit2 Цена  29 доллар

Characteristics of unit2 Частота мин  20 герц

Characteristics of unit2 Частота макс  20 кгерц

Characteristics of unit3 Цена  95 доллар

Characteristics of unit3 Частота мин  15 герц

Characteristics of unit3 Частота макс  22 кгерц
Изменить формат вывода - пять минут.
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 19:12  [ТС]     Анализ данных XML-документа #7
Возникает ошибка в этих строках
#include<libxml/parser.h>
#include<libxml/tree.h>
Как её устранить?
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.06.2008, 19:47     Анализ данных XML-документа #8
Надо поставить libxml. Она ставится автоматически с GNOME. Иногда
Под винду он, вроде, тоже сть где-то...
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 21:22  [ТС]     Анализ данных XML-документа #9
Нашёл libxml++-2.22.0. там нет файла tree.h. Какая у Вас версия libxml ?
libxml ставить туда же где и stdio.h, string.h ?
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.06.2008, 21:38     Анализ данных XML-документа #10
У меня 2.6.26.
Здесь можно найти последние версии:
http://xmlsoft.org/.
А там инсталлятора-то нет, разве?
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 22:12  [ТС]     Анализ данных XML-документа #11
Именно оттуда и брал. Нашёл Вашу версию, но теперь ошибка с каким-то файлом iconv.h (
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.06.2008, 22:39     Анализ данных XML-документа #12
Хм...это файл для работы с кодировками...
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
23.06.2008, 01:28  [ТС]     Анализ данных XML-документа #13
Есть версии как устранить эту ошибку?
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.06.2008, 13:51     Анализ данных XML-документа #14
А что за ошибка?
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
24.06.2008, 12:18  [ТС]     Анализ данных XML-документа #15
Нельзя открыть файл iconv.h
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.06.2008, 13:06     Анализ данных XML-документа #16
У тебя винда?
Смотрим тут и пробуем
Я в принципе, к чему. На винде есть такая штука удобная DOM. Можно ничего не ставить. Вот только код немного иной будет. Через OLE его использовать можно:
http://www.cyberforum.ru/delphi/thre...html#post40386
Правда, это на дельфе. Но смысл не меняется, тот же объект документа, объект для атрибута, для узла.
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
25.06.2008, 17:05  [ТС]     Анализ данных XML-документа #17
Не подскажете, где в коде прописывается путь до XML-документа?

Добавлено через 7 минут
Из-за чего возникает ошибка
error C2664: 'strcmp' : cannot convert parameter 1 from 'const xmlChar *' to 'const char *'
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.06.2008, 17:25     Анализ данных XML-документа #18
) в коде - нигде. Он передается в аргументе командной строки.
Ошибка возникает из-за того, что тип разный. У меня не возникало такой ошибки Попробуй привести к (char*) явно.
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
25.06.2008, 17:38  [ТС]     Анализ данных XML-документа #19
Цитата Сообщение от Vourhey Посмотреть сообщение
) в коде - нигде. Он передается в аргументе командной строки.
Тогда как мне сделать, чтобы передовался именно мой док? Я просто не знаю такого способа, когда писал что-то, всегда прописывал путь)
И ещё вопрос, Вы говорили что эта программа написанна не под винду, но если я поставил все библиотеки, она должна работать в винде и записывать в текстовый файл результат или надо менять код ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2008, 18:12     Анализ данных XML-документа
Еще ссылки по теме:

Сбор и анализ данных в оперативной памяти C++
C++ Builder StringGrid анализ, выборка и подсчет данных
Сортировка и чтение данных из документа C++
Анализ вводимых данных на соответствие типу int C++
C++ Проверка корректности xml документа

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.06.2008, 18:12     Анализ данных XML-документа #20
Передай в аргументе командной строки свой путь.
Хех. Я не знаю, как она под виндой будет компилится. Работать-то так же будет. А вот для компилера, может, че и подправить надо будет.
Yandex
Объявления
25.06.2008, 18:12     Анализ данных XML-документа
Ответ Создать тему
Опции темы

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