Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/68: Рейтинг темы: голосов - 68, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
1

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

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

Author24 — интернет-сервис помощи студентам
Помогите с программой.
Нужно считать числовые данные(цена, частота мин, частота макс) из 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.06.2008, 15:58
Ответы с готовыми решениями:

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

Обработка и изъятие данных из XML документа средствами PHP
Объясните работу обработки XML документа с помощью PHP Например: &lt;author&gt;А.С. Пушкин&lt;/author&gt; И...

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

Создание XML-документа из имеющегося шаблона с добавлением вводимых данных
Добрый день! подскажите как будет выглядеть скрипт: запускаю, ввожу параметры в диалоговом окне...

39
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.06.2008, 17:15 2
Вы хотите сказать, что этот док парсится? :eek:
0
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
21.06.2008, 17:41  [ТС] 3
не проверял, этот док писал по аналогии с теорией
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.06.2008, 17:52 4
А теория не шепнула Вам, что корневой элемент должен быть один? Ваш файл только с помощью fopen и прочих можно читать. Он не будет парситься. "Учи матчасть."
0
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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
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
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 19:12  [ТС] 7
Возникает ошибка в этих строках
#include<libxml/parser.h>
#include<libxml/tree.h>
Как её устранить?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.06.2008, 19:47 8
Надо поставить libxml. Она ставится автоматически с GNOME. Иногда
Под винду он, вроде, тоже сть где-то...
0
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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.06.2008, 21:38 10
У меня 2.6.26.
Здесь можно найти последние версии:
http://xmlsoft.org/.
А там инсталлятора-то нет, разве?
0
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
22.06.2008, 22:12  [ТС] 11
Именно оттуда и брал. Нашёл Вашу версию, но теперь ошибка с каким-то файлом iconv.h (
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
22.06.2008, 22:39 12
Хм...это файл для работы с кодировками...
0
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
23.06.2008, 01:28  [ТС] 13
Есть версии как устранить эту ошибку?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
23.06.2008, 13:51 14
А что за ошибка?
0
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
24.06.2008, 12:18  [ТС] 15
Нельзя открыть файл iconv.h
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
24.06.2008, 13:06 16
У тебя винда?
Смотрим тут и пробуем
Я в принципе, к чему. На винде есть такая штука удобная DOM. Можно ничего не ставить. Вот только код немного иной будет. Через OLE его использовать можно:
https://www.cyberforum.ru/delp... #post40386
Правда, это на дельфе. Но смысл не меняется, тот же объект документа, объект для атрибута, для узла.
0
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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
25.06.2008, 17:25 18
) в коде - нигде. Он передается в аргументе командной строки.
Ошибка возникает из-за того, что тип разный. У меня не возникало такой ошибки Попробуй привести к (char*) явно.
0
0 / 0 / 0
Регистрация: 21.06.2008
Сообщений: 20
25.06.2008, 17:38  [ТС] 19
Цитата Сообщение от Vourhey Посмотреть сообщение
) в коде - нигде. Он передается в аргументе командной строки.
Тогда как мне сделать, чтобы передовался именно мой док? Я просто не знаю такого способа, когда писал что-то, всегда прописывал путь)
И ещё вопрос, Вы говорили что эта программа написанна не под винду, но если я поставил все библиотеки, она должна работать в винде и записывать в текстовый файл результат или надо менять код ?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
25.06.2008, 18:12 20
Передай в аргументе командной строки свой путь.
Хех. Я не знаю, как она под виндой будет компилится. Работать-то так же будет. А вот для компилера, может, че и подправить надо будет.
0
25.06.2008, 18:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2008, 18:12
Помогаю со студенческими работами здесь

Создание xml документа посредством LINQ to XML
Добрый день. Мне необходимо создать xml-документ который будет включать следующие элементы: ...

Создание документа XML через LINQ-to-XML
как создать новый документ xml через LINQ-to-xml XDocument doc =new...

Создание XML документа по XML Shema
Здравствуйте нужна помощь в составлении XML документа по данной схеме: &lt;?xml version=&quot;1.0&quot;...

Вывести данные в таблицу из xml файла. - Анализ XML файла, выгружаемого программой SPU_ORB.
Есть такой файлик с расширением .xml (из программы spy_orb) в нем много строк, но нам нужно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru