Xml - обращение к дочернему элементу |
Здравствуйте, гость ( Вход | Регистрация )
Xml - обращение к дочернему элементу |
Kagami |
8.4.2009, 21:59
Сообщение
#21
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Посидел десять минут, но раскусил этот орешек:
Раскрывающийся текст void ExpertSystem::showHelp() { static QString lastHelpMessage; QString message; QDomDocument doc; QFile file("/home/opensuse/qt/expertsystem/help.xml"); if (!file.exists()) { QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 001. Файл help.xml не существует")); } if (!file.open(QIODevice::ReadOnly)) { QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 002. Невозможно открыть файл help.xml")); return; } if (!doc.setContent(&file)) { QMessageBox::warning(this, QObject::trUtf8("Предупреждение"), QObject::trUtf8("Ошибка 003. Невозможно прочитать файл help.xml")); file.close(); return; } //Второй раз устанавливать содержимое не надо // В результате получим pageid равное числу... QString pageid = "page" + QString("%1").arg(1, 2, 10, QChar('0')); //Вот нафига заводить еще один документ? Если мы уже все загрузили в doc QDomElement root = domDocument.documentElement(); QDomElement root = doc.documentElement(); //help у нас корневой элемент и уже содержится в root. Второй раз его искать не надо //С учетом вышесказанного эта строка не правильная QDomElement child = root.firstChildElement("page"); while (!child.isNull()) { if (child.attribute("id") == pageid) { QDomElement mess = child.firstChildElement("message"); message = mess.text(); //message = pageid; } child = child.nextSiblingElement("page"); } file.close(); //if (lastHelpMessage == message) // message = tr(""); QMessageBox::information(this, QObject::trUtf8("Подсказка"), message); lastHelpMessage = message; } P.S. Жалко что нельзя раскрашивать код, только так |
|
|
FladeX |
9.4.2009, 11:46
Сообщение
#22
|
Студент Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо за развернутый ответ! Теперь понятнее стало.
Однако, погоняв эту функцию, заметил, что условие
всегда ложно. То есть если внутри этого условия задавать переменную message, то в программе ничего не будет выведено, так как этот участок кода никогда не отработает. А если задавать message вне условной конструкции, то все ок. Почему же так происходит? Может условие не совсем корректное? |
|
|
Kagami |
9.4.2009, 13:25
Сообщение
#23
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Из-за области видимости переменной. Если ее создавать в условии, то в его конце она будет удалена
|
|
|
FladeX |
10.4.2009, 15:00
Сообщение
#24
|
Студент Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: 0 |
Не совсем понял, какую переменную мы создаем в условии...
Перенес из цикла все что только можно было вынести - результат тот же (пустое модальное окно). Перенес вызов QMessageBox внутрь цикла - модальное окно вообще перестало вызываться. |
|
|
Kagami |
10.4.2009, 18:25
Сообщение
#25
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
А какие значение возвращает currentId() ?
|
|
|
FladeX |
13.4.2009, 14:15
Сообщение
#26
|
Студент Группа: Участник Сообщений: 67 Регистрация: 20.2.2009 Пользователь №: 564 Спасибо сказали: 0 раз(а) Репутация: 0 |
Возвращает int.
Но я уже решил проблему: Вместо этого:
прописал старое:
и все заработало! Отдельное спасибо Kagami за помощь |
|
|
Litkevich Yuriy |
13.4.2009, 15:14
Сообщение
#27
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Kagami |
13.4.2009, 18:59
Сообщение
#28
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Если бы я заметил что в середине обсуждения у тебя поменялся xml-файл все решилось бы быстрее
Сообщение отредактировал Kagami - 13.4.2009, 19:02 |
|
|
Текстовая версия | Сейчас: 24.1.2025, 0:34 |