Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.87/53: Рейтинг темы: голосов - 53, средняя оценка - 4.87
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
#1

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

21.06.2008, 15:58. Просмотров 10679. Ответов 39
Метки нет (Все метки)

Помогите с программой.
Нужно считать числовые данные(цена, частота мин, частота макс) из 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>

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2008, 15:58
Ответы с готовыми решениями:

Сбор и анализ данных в оперативной памяти
Подскажите пожалуйста, какие вы знаете способы сбора данных из оперативной...

StringGrid анализ, выборка и подсчет данных
Доброго времени суток! Такой вопрос: у меня есть StringGrid в который...

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

База данных с чтением и загрузкой в файл XML
Плисс нужен исходник с базой данных в С++ Builder c чтением и загрузкой в XML...

[XML] - Как правильно сохранить XML с уровнями и отступами?
Приветы всем. Подскажите как правильно сохранить файл .xml чтобы сохранились...

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

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

Копирование определенного узла из одного XML в другой XML
Подскажите пожалуйста как скопировать узел из одного XML в другой XML в C++...

[XML] Как отсортировать данные в XML?
Друзья привет. В ранее созданой теме приводил пример .xml файла. Подскажите...

Модель XML документа, представление в виде дерева
Народ, может у кого есть програмка, необходимо &quot;Разработать объектную модель...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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