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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 84, средняя оценка - 4.81
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
#1

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

21.06.2008, 15:58. Просмотров 10385. Ответов 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2008, 15:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Анализ данных XML-документа (C++):

Сбор и анализ данных в оперативной памяти - C++
Подскажите пожалуйста, какие вы знаете способы сбора данных из оперативной памяти(абсолютно любые способы) и соответственно что нить об...

StringGrid анализ, выборка и подсчет данных - C++ Builder
Доброго времени суток! Такой вопрос: у меня есть StringGrid в который заносятся ФИО студента и его оценки по различным предметам. ...

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

Копирование определенного узла из одного XML в другой XML - C++ Builder
Подскажите пожалуйста как скопировать узел из одного XML в другой XML в C++ Builder 6 &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; ...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2008, 17:15 #2
Вы хотите сказать, что этот док парсится? :eek:
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
21.06.2008, 17:41  [ТС] #3
не проверял, этот док писал по аналогии с теорией
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
21.06.2008, 17:52 #4
А теория не шепнула Вам, что корневой элемент должен быть один? Ваш файл только с помощью fopen и прочих можно читать. Он не будет парситься. "Учи матчасть."
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>
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
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 кгерц
Изменить формат вывода - пять минут.
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 19:12  [ТС] #7
Возникает ошибка в этих строках
#include<libxml/parser.h>
#include<libxml/tree.h>
Как её устранить?
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.06.2008, 19:47 #8
Надо поставить libxml. Она ставится автоматически с GNOME. Иногда
Под винду он, вроде, тоже сть где-то...
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 ?
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.06.2008, 21:38 #10
У меня 2.6.26.
Здесь можно найти последние версии:
http://xmlsoft.org/.
А там инсталлятора-то нет, разве?
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 22:12  [ТС] #11
Именно оттуда и брал. Нашёл Вашу версию, но теперь ошибка с каким-то файлом iconv.h (
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.06.2008, 22:39 #12
Хм...это файл для работы с кодировками...
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
23.06.2008, 01:28  [ТС] #13
Есть версии как устранить эту ошибку?
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.06.2008, 13:51 #14
А что за ошибка?
Haappy
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
24.06.2008, 12:18  [ТС] #15
Нельзя открыть файл iconv.h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2008, 12:18
Привет! Вот еще темы с ответами:

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

Анализ XML документа - Java
Разобрал ДОМ-анализатором свой хмл, получив конечные элементы и всю их вложенность. Пускай конечный элемент Element name имеет вид: ...

Загрузка данных из XML документа. В RadioButton.Caption не отображается значение! - Delphi
Есть часть программы(тест), которая берет значения из XML файла(test.xml), по средствам XMLDocument и вставляет в RadioButton.Caption, но...

VBS Создание XML-документа из имеющегося шаблона с добавлением вводимых данных - VBScript/JScript
Добрый день! подскажите как будет выглядеть скрипт: запускаю, ввожу параметры в диалоговом окне номер телефона $num фио $fio mac...


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

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

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