Xml - обращение к дочернему элементу |
Здравствуйте, гость ( Вход | Регистрация )
Xml - обращение к дочернему элементу |
FladeX |
27.3.2009, 12:18
Сообщение
#1
|
Студент Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: 0 |
Структура xml:
Нужно по id найти в нем <page>, а затем получить оттуда содержимое <message>. Пытался делать например так:
Но не получается... Как же правильно тогда? |
|
|
igor_bogomolov |
27.3.2009, 14:22
Сообщение
#2
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Начну с того, что в приведенном Вами коде очень много ошибок, что очень неприятно при отладке. Надо быть поокуратнее.
Цитата QDomElement QDomDocument::elementById ( const QString & elementId ) Returns the element whose ID is equal to elementId. If no element with the ID was found, this function returns a null element. Since the QDomClasses do not know which attributes are element IDs, this function returns always a null element. This may change in a future version. Т.е. насколько я понимаю, этот метод всегда вернет нулевой елемент. Я сделал так:
Данный код у меня работает. Может не самое оптимальное решение, кто знает как сделать лучше раскажите |
|
|
FladeX |
27.3.2009, 14:57
Сообщение
#3
|
Студент Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: 0 |
Выдает ошибку
на строке
что не так? |
|
|
igor_bogomolov |
27.3.2009, 15:16
Сообщение
#4
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
???
Я так понимаю, что childElem у Вас где-то уже объявлен. Сделайте просто
И domDocument, в Вашем случае объявлен как doc Отпишитесь о результате. Если что выложу компилябильный проект. |
|
|
FladeX |
27.3.2009, 15:23
Сообщение
#5
|
Студент Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: 0 |
childElem ранее объявлен не был.
Замена строки не помогла, ошибка та же самая... |
|
|
igor_bogomolov |
27.3.2009, 15:47
Сообщение
#6
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
копируем куда-нибудь проект QTDIR/examples/xml/dombookmarks
В файле xbeltree.cpp ищем функцию bool XbelTree::read(QIODevice *device) Что бы не мучаться, заменяем весь ее код, на следущий: Раскрывающийся текст
Рядом с exe-шником кладем ваш файл Раскрывающийся текст
Компилируем, смотрим что выводит qDebug(); Не забываем отписаться о результатах. P.S. У меня все выше описанное прекрасно работает. |
|
|
Kagami |
27.3.2009, 18:15
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Есть решение немного по-изящнее:
Раскрывающийся текст
Перебираем только нужные элементы и не чувствительны к положению <message> - в предыдущем примере он обязан находиться в конце. |
|
|
igor_bogomolov |
27.3.2009, 23:27
Сообщение
#8
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Есть решение немного по-изящнее: Не буду врать, по специфике своей работы никак с xml сталкиваться не приходилось. Просто было интересно разобраться, вот и помог. Ваш же пример выдаёт не то что мы ожидаем. В топикстарте написано, что требуется вернуть данные тега "message", у Вас же получается следущее Цитата "title of page01text1" а надо Цитата "text1" в предыдущем примере он обязан находиться в конце. Да, я исходил из структуры файла |
|
|
Kagami |
27.3.2009, 23:33
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
|
|
|
Litkevich Yuriy |
28.3.2009, 3:34
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 23.1.2025, 20:21 |