Russian Qt Forum
Ноябрь 25, 2024, 12:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] чтение значение тэга  (Прочитано 7585 раз)
KosToZyB
Гость
« : Декабрь 26, 2010, 22:45 »

Здравствуйте, есть такой xml файл:
Код:
<testing>
<subject>
<question>"qustion 1"</question>
<bool_answer>false</bool_answer>
<answer>"1 answer"</answer>
<answer>"2 answer"</answer>
<answer>"3 answer"</answer>
<answer>"4 answer"</answer>
<correctly_answer>"2"</correctly_answer>
</subject>
<subject>
<question>"qustion 2"</question>
<bool_answer>false</bool_answer>
<answer>"1 answer"</answer>
<answer>"2 answer"</answer>
<answer>"3 answer"</answer>
<answer>"4 answer"</answer>
<correctly_answer>"2"</correctly_answer>
</subject>
</testing>
Код:
Цитировать
xmlStreamReaderDatabase = new QXmlStreamReader();
xmlStreamReaderDatabase->setDevice(&file);
   while (!xmlStreamReaderDatabase->atEnd()) {
      xmlStreamReaderDatabase->readNext();
      if (xmlStreamReaderDatabase->isStartElement()){
         qDebug() << xmlStreamReaderDatabase->name(); //считываю имя атрибута
      }
   }
Как считать значение атрибута? т.е. то, что находится между допустим атрибутами <answer> и </answer>?
P.S.
может xml файл структурирован не верно?
« Последнее редактирование: Декабрь 27, 2010, 20:21 от KosToZyB » Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #1 : Декабрь 26, 2010, 23:21 »

readElementText()
Записан
KosToZyB
Гость
« Ответ #2 : Декабрь 26, 2010, 23:30 »

после
Код:
qDebug() << xmlStreamReaderDatabase->name();
добавляю
Код:
qDebug() << xmlStreamReaderDatabase->readElementText();
выводит:
Код:
"testing" 
"
"
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #3 : Декабрь 27, 2010, 09:14 »

ф-ция readElementText() грубо говоря читает текст между тегами, но если есть вложенные теги тогда читать нужно по другому.

псевдо код:
Код:
while(!atEnd())
{
  if (isEndElement())
    break;

  if (isStartElement())
  {
     if (name() == "testing")
     {
          while(!atEnd())
          {
             if (isEndElement())
             break;

             if (isStartElement())
             {
                  if (name() == "subject")
                  {
                      while(!atEnd())
                      {
                          if (isEndElement())
                          break;

                          if (isStartElement())
                          {
                              if (name() == "question")
                              {
                                   readElementText();
                              }else if (name() == "bool_answer")
                              {
                                   readElementText();
                              }      //и так далее
                          }
                      }
                  }
             }
          }
     }
  }
}


Записан
ufna
Гость
« Ответ #4 : Декабрь 27, 2010, 09:29 »

Экспертиза, это "О_О". Такие вопросы решаются немного другими путями :0)
Записан
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #5 : Декабрь 27, 2010, 09:52 »

писал в торопях так что сильно не ругайте Улыбающийся обычно я это все дело еще и на процедуры разделяю, для удобства, каждая процедура с вой тег читает ну если он не последний Улыбающийся кстати если есть более красивое решение с радостью выслушаю  Подмигивающий
Записан
deaks
Гость
« Ответ #6 : Декабрь 27, 2010, 12:11 »

может вам стоит заюзать dom или sax, чем возиться с этим построчным считыванием
Записан
SASA
Гость
« Ответ #7 : Декабрь 27, 2010, 15:02 »

может вам стоит заюзать dom или sax, чем возиться с этим построчным считыванием
+1. Но есть одно но. Размер исходного файла. Если < 10 Мб, то смело юзайте dom. Если больше - надо смотреть сколько работает функция QDomDocument::setContent.
Записан
KosToZyB
Гость
« Ответ #8 : Декабрь 27, 2010, 18:13 »

всем спасибо. Да вчера ночью dom и заюзал)) не было времени с QXmlStreamReader разбираться, я думал что он проще, оказалось не совсем так)
Записан
ufna
Гость
« Ответ #9 : Декабрь 27, 2010, 18:41 »

Есть такая классная штука как XQuery (или чет такое по названию)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 22.