Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95

Как правильно считать текс с xml файла (уровень:начинающий)?

30.03.2016, 17:53. Показов 1543. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вобщем столкнулся с проблемой при считывании с xml файла, вроде как просто, но половину информации увы теряю. Не знаю что делать. Вот что на данный момент имею:

пример xml файла такой:
XML
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
<?xml version=”1.0”?>
<address_book>
    <contact>
        <name>Ivan</name>
        <street>10 Bunina SS15</street>
        <city>Svrdlov</city>
        <state>Russia</state>
        <postcode>41500</postcode>
    </contact>
    <contact>
        <name>Djek</name>
        <street>9 Jalan Sentosa 2</street>
        <city>Boston</city>
        <state>Usa</state>
        <postcode>47400</postcode>
    </contact>
    <contact>
        <name>Jean Grey</name>
        <street>5 Penang Road</street>
        <city>Georgetown</city>
        <state>Swiss</state>
        <postcode>32800</postcode>
    </contact>
    <contact>
        <name>Iren</name>
        <street>98 Lorong Gugusan Alam</street>
        <city>Brun street</city>
        <state>Italy</state>
        <postcode>48000</postcode>
    </contact>
</address_book>
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
 
 
struct infoContact
{
    char name[30];
    char streetName[50];
    char city[50];
    char state[50];
    int postcode;
};
 
int main()
{
    int i=0;
    char xmlFile[20];
    infoContact contact[10];
    ifstream readFile;
 
    cout<<"Please enter the file: ";
    cin>>xmlFile;
 
    readFile.open(xmlFile,ios::in);
 
        readFile.ignore(256,'\n');
        readFile.ignore(256,'\n');
        readFile.ignore(256,'\n');
 
    do
    {
        readFile.ignore(20,'>');
        readFile.get(contact[i].name,50,'<');
        cout<<contact[i].name<<endl;
        readFile.ignore(256,'\n');
 
        readFile.ignore(20,'>');
        readFile.get(contact[i].streetName,50,'<');
        cout<<contact[i].streetName<<endl;
        readFile.ignore(256,'\n');
 
        readFile.ignore(20,'>');
        readFile.get(contact[i].city,50,'<');
        cout<<contact[i].city<<endl;
        readFile.ignore(256,'\n');
 
        readFile.ignore(20,'>');
        readFile.get(contact[i].state,56,'<');
        cout<<contact[i].state<<endl;
        readFile.ignore(256,'\n');
 
        readFile.ignore(20,'>');
        readFile>>contact[i].postcode;
        cout<<contact[i].postcode<<endl;
        readFile.ignore(256,'\n');
 
    }while(readFile);
 
    return 0;
}

в конце появляется ноль и половина информации теряется.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.03.2016, 17:53
Ответы с готовыми решениями:

Как правильно считать данные в .xml файле?
Приветствую всех. Вопрос такой, есть логи утилиты AVZ, пример таких логов можете найти в разделе лечения. Меня интересует файл .xml...

Чтение из XML: как правильно считать информацию из блока
Добрый день,есть XML файл,с которого мне нужно прочитать информацию начиная с блока organization,почитав статьи по работе с xml написал...

Как правильно прочитать текс?
device Atmega128 .include “m128def.inc” ldi r16,High(RAMEND) out SPH,r16 ldi r16,Low(RAMEND) out SPL,r16

5
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
30.03.2016, 17:54  [ТС]
что не так в моем коде?
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
30.03.2016, 17:58
Цитата Сообщение от almazuulu Посмотреть сообщение
столкнулся с проблемой при считывании с xml файла, вроде как просто, но половину информации увы теряю.
Разбор XML - это вовсе не так просто, как вам кажется, особенно при изрядной глубине вложенности и т.д.
Если вам нужен разбор XML, то самый продуктивный способ:
- скачать и установить библиотеку Libxml2
- её легко использовать для парсинга XML любой сложност
1
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
30.03.2016, 19:44  [ТС]
Цитата Сообщение от Olej Посмотреть сообщение
сто, как вам кажется, особенно при изрядной глубине вложенности и т.д.
Если вам нужен разбор XML, то самый продуктивный способ:
- скачать и установить библиотеку Libxml2
- её легко использ
да не парсинг нужен.. ((( мы это пока не проходим. Нужно банально прочесть файл. Как с обычного текстового файла
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
30.03.2016, 20:18
Лучший ответ Сообщение было отмечено almazuulu как решение

Решение

У Вас не учитывается наличие закрывающего тега </contact> и следующего за ним <contact>. Первое исправление - перенести строку #31 внутрь цикла в начало и в конец (будут пропущены оба тега). Далее - конец файла будет обрабатываться не совсем корректно. Можно считывать тег и проверять его на равенство "contact" (признак начала описания контакта) и "/address_book" (признак конца списка контактов). Ниже - примерный вариант возможного исправления.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstring>
using namespace std;
 
 
struct infoContact
{
    char name[30];
    char streetName[50];
    char city[50];
    char state[50];
    int postcode;
};
 
int main()
{
    int i=0;
    char xmlFile[20];
    infoContact contact[10];
    ifstream readFile;
 
    cout<<"Please enter the file: ";
    cin>>xmlFile;
 
    readFile.open(xmlFile,ios::in);
 
    readFile.ignore(256,'\n');
    readFile.ignore(256,'\n');
 
    char tag[50];
 
    do
    {
        // Чтение тега.
        readFile.ignore(256,'<');
        readFile.get(tag, 50, '>');
        readFile.ignore(256,'\n');
 
        if (strcmp(tag, "contact") == 0)
        {
            readFile.ignore(20,'>');
            readFile.get(contact[i].name,50,'<');
            cout<<contact[i].name<<endl;
            readFile.ignore(256,'\n');
 
            readFile.ignore(20,'>');
            readFile.get(contact[i].streetName,50,'<');
            cout<<contact[i].streetName<<endl;
            readFile.ignore(256,'\n');
 
            readFile.ignore(20,'>');
            readFile.get(contact[i].city,50,'<');
            cout<<contact[i].city<<endl;
            readFile.ignore(256,'\n');
 
            readFile.ignore(20,'>');
            readFile.get(contact[i].state,56,'<');
            cout<<contact[i].state<<endl;
            readFile.ignore(256,'\n');
 
            readFile.ignore(20,'>');
            readFile>>contact[i].postcode;
            cout<<contact[i].postcode<<endl;
            readFile.ignore(256,'\n');
 
            // Пропуск закрывающего тега </contact>.
            readFile.ignore(256,'\n');
 
            // Пустая строка между контактами.
            cout << endl;
        }
 
    } while(strcmp(tag, "/address_book") != 0);
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 95
31.03.2016, 04:36  [ТС]
valen10, Спасибо за ответ! Именно то, что требовалось ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.03.2016, 04:36
Помогаю со студенческими работами здесь

Как считать сроку из xml файла
Подскажите пожалуйста, как считать сроку из xml файла? Например эту строку &lt;item&gt;Время заказа: 16:24:58&lt;/item&gt; Вот из...

как Считать данные из файла xml
Подскажите пожалуйста как считать данные которые находятся в самом тэге, а не между ними, тоесть на данном примере значения Х и Y из файла...

Как считать шрифт с файла xml?
Есть файл xml, в нем заданы параметры шрифта для Label. Как их применить к нему? &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;...

Как правильно считать с файла?
char inputBuffer =null; isr.read(inputBuffer); тут конечно же выдает NULLPointer exception. Мне заранее неизвестно сколько чаров в...

Как правильно считать пробел с файла?
Здравстуйте. Сделал я программную реализация Нормальных алгоритмов Маркова. В теории НАМ пустой символ обозначают лямбдой, я же в своей...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru