![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
FladeX |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Структура xml:
Нужно по id найти в нем <page>, а затем получить оттуда содержимое <message>. Пытался делать например так:
Но не получается... Как же правильно тогда? |
|
|
![]() |
igor_bogomolov |
![]()
Сообщение
#2
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Начну с того, что в приведенном Вами коде очень много ошибок, что очень неприятно при отладке. Надо быть поокуратнее.
Цитата 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 |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Выдает ошибку
на строке
что не так? |
|
|
igor_bogomolov |
![]()
Сообщение
#4
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
???
Я так понимаю, что childElem у Вас где-то уже объявлен. Сделайте просто
И domDocument, в Вашем случае объявлен как doc Отпишитесь о результате. Если что выложу компилябильный проект. |
|
|
FladeX |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
childElem ранее объявлен не был.
Замена строки не помогла, ошибка та же самая... |
|
|
igor_bogomolov |
![]()
Сообщение
#6
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
копируем куда-нибудь проект QTDIR/examples/xml/dombookmarks
В файле xbeltree.cpp ищем функцию bool XbelTree::read(QIODevice *device) Что бы не мучаться, заменяем весь ее код, на следущий: Раскрывающийся текст
Рядом с exe-шником кладем ваш файл Раскрывающийся текст
Компилируем, смотрим что выводит qDebug(); Не забываем отписаться о результатах. P.S. У меня все выше описанное прекрасно работает. |
|
|
Kagami |
![]()
Сообщение
#7
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: ![]() ![]() ![]() |
Есть решение немного по-изящнее:
Раскрывающийся текст
Перебираем только нужные элементы и не чувствительны к положению <message> - в предыдущем примере он обязан находиться в конце. |
|
|
igor_bogomolov |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Kagami @ 27.3.2009, 18:15) Link Есть решение немного по-изящнее: Не буду врать, по специфике своей работы никак с xml сталкиваться не приходилось. Просто было интересно разобраться, вот и помог. Ваш же пример выдаёт не то что мы ожидаем. В топикстарте написано, что требуется вернуть данные тега "message", у Вас же получается следущее Цитата "title of page01text1" а надо Цитата "text1" Цитата(Kagami @ 27.3.2009, 18:15) Link в предыдущем примере он обязан находиться в конце. Да, я исходил из структуры файла ![]() |
|
|
Kagami |
![]()
Сообщение
#9
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(igor_bogomolov @ 27.3.2009, 23:27) Link Ваш же пример выдаёт не то что мы ожидаем. Упс, небольшая очепятка всралась ![]() Правильно так:
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Kagami @ 28.3.2009, 2:33) Link .text() по моему опыту, лучше избегать применения этой функции, т.к. она рекурсивная, т.е. схватит все вложенные тэги, часто это неподходящий вариант. Лучше использовать data() или value().П.С. еслиб не простуда, привел бы пример, но нагретая голова плохо соображает. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 12.8.2025, 3:52 |