Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
gletschr
0 / 0 / 0
Регистрация: 10.11.2014
Сообщений: 3
1

QDomDocument парсинг вложенных тегов

29.11.2014, 10:54. Просмотров 1035. Ответов 0
Метки нет (Все метки)

Добрый день, пытаюсь распарсить простой 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" ?>
<Machine>
    <Name>
    </Name>
    <CoordinateSystem>
    </CoordinateSystem>
    <Controls>
        <Control type = 0 mode = 1 cmd = "0" text = "Выполнить" />
        <Control type = 0 mode = 1 cmd = "1" text = "Пауза" />
        <Control type = 0 mode = 1 cmd = "2" text = "Остановка" />
        <Control type = 0 mode = 1 cmd = "3" text = "Сброс"/>
    </Controls>
    <Indicators>
        <Indicator type = 0 mode = 1 text = "Выполнение" />
        <Indicator type = 0 mode = 1 text = "Пауза" />
        <Indicator type = 0 mode = 1 text = "Остановка" />
        <Indicator type = 0 mode = 1 text = "Сброс"/>
    </Indicators>
</Machine>
Таким образом:
C++
1
2
3
4
5
6
7
    QDomDocument document;
    document.setContent(&file);
    QDomNodeList controls = document.elementsByTagName("Control");
    for (int i = 0; i < controls.length(); i ++) {
        QDomElement control = controls.at(i).toElement();
        qDebug() << control.tagName();
    }
В итоге консоль пустая.

Вопрос: каким образом можно получить доступ к вложенным тегам <Control /> и <Indicator />?

P.S: пробовал уже тысячей способов, в т.ч. QXmlStreamReader'ом, во всех случаях по каким то непонятным мне причинам, парсер видит только первые потомки родительского класса (<Machine>), причем, если выводить все первые потомки, то вывод останавливается на теге <Controls>, тег <Indicators> не выводится.

Добавлено через 16 минут
В дополнение к P.S:

Код:
C++
1
2
3
4
5
6
7
8
    QDomDocument document;
    document.setContent(&file);
    QDomElement root = document.documentElement();
    QDomNodeList childs = root.childNodes();
    for (int i = 0; i < childs.length(); i ++) {
        QDomElement child = childs.at(i).toElement();
        qDebug() << child.tagName();
    }
Выводит:
"Name"
"CoordinateSystem"
"Controls"

Почему не видит Indicators?

Добавлено через 51 минуту
Прошу прощения за беспокойство, ошибку нашел сам (неправильно оформил xml)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2014, 10:54
Ответы с готовыми решениями:

Считывание в QDomDocument
Доброго времени суток. Необходимо несколько раз пройтись по xml-файлику,...

Кодировки в QDomDocument
Мне нужно было сделать функцию сохранения на основе QDomDocument для одной...

Процедура вылетает, поработав с QDomDocument
Пытаюсь создать и сохранить документ XML при помощи QDomDocument. Создаёт,...

Процедура вылетает, поработав с QDomDocument
Процедура, успешно сохранив файл, вылетает. Если добавить scene.clear(); - тоже...

Удаление QDomDocument из оперативной памяти
Добрый день, у меня возникла проблема, для возможности крайне быстрого поиска...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2014, 10:54

Ошибка при сохранении QDOMDocument
Создаю QDomDocument и сохраняю. По завершении (успешно сохранив в файл)...

QDomDocument сохраняет атрибуты не в том порядке
Здравствуйте, товарищи! Столкнулся со следующей проблемой при работе с XML: ...

QDomDocument вылетает при выходе из функции
Пытаюсь сохранять данные в формате XML, пользуясь QDomDocument. при выходе из...


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

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

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