![]() |
|
|
![]()
|
|
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Хотел поинтересовать такой вещью...
Я создаю объект парсера и хочу его использовать несколько раз, но без уничтожения, то есть используя перегруженную функцию parse()
Все хорошо работает, пока у меня не появляются ошибки Xml, либо мои, либо стандарта, не важно... суть в том, что когда я пытаюсь использовать снова этот парсер, у меня данные предыдущие не очищаются, и парсить этим объектом не получается, хотя я как видите постоянно перед добавлением новых данных вызываю функцию clear(). Что я делаю не правильно и верно ли я использую эту функцию... Заранее благодарен за помощь |
|||
|
||||
| null56 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Ребята неужели парсер одноразовый, я не понимаю... вот тут кое что нашел по своей проблеме, не могли бы вы объяснить, что имели в виду троли описывая это...
я набросал простой пример, который выдает это же узкое место xmlparser.h
xmlparser.cpp
main.cpp
Задача примера, встретив тег с именем "preved" сгенерить ошибку "custom error", что он успешно и делает, но вот почему вводя правильные, для данного примера, входные данные во втором вызове метода parse происходит вылет с ошибкой PrematureEndOfDocumentError. глосащем о том, что нарушена структура, вот в этом вопрос. Правильно ли я использую данный парсер и почему происходит ошибка именно после того, как я генерю raiseError? ЗЫ: замечу, что изменив первые данные на другую пару тегов, оба процесса отработают Заранее благодарен за помощь всем откликнувшимся |
||||||||
|
|||||||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Если возникает ошибка, то дальнейшее чтение невозможно, функция atEnd() возвращает true и метод readNext() ничего не делает, но возвращает токен типа QXmlStreamReader::Invalid. Но есть одно исключение из этого правила. Ошибка типа QXmlStreamReader::PrematureEndOfDocumentError говорит о том, что был отпарсен кусок xml'я правильной структуры (например <preved>text</preved>, а не <preved>text<pr). И устройство ожидает получение следующего куска xml'я, который может качаться через интернет например. Как только кусок скачается его надо добавлять через метод addData и тогда парсинг можно возобновлять. С конструктором QXmlStreamReader::QXmlStreamReader ( QIODevice * device ) это естественно работать не будет. |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
ну а я что делаю???
я очищаю старый контекст(clear), когда вызывается функция parse и добавляю новые данные, которые хочу распарсить с нуля (addData), данные передавались в качестве аргумента, почему выскакивает ошибка??? ведь последовательность вроде правильная parse -> clear -> addData, что ему не нравится? я не понимаю? |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Ты просил перевести, я перевел. Попробуй унаследоваться от QXmlSimpleReader. |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
SABROG, спасибо большое, это я так сам с собой разговариваю... просто не могу понять, что не получается
Это сообщение отредактировал(а) null56 - 22.5.2009, 20:12 |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
видимо не один я такой, возможно бага, которая уже решена
http://www.qtsoftware.com/developer/task-t...y&id=170748 Добавлено через 1 минуту и 6 секунд http://www.qtsoftware.com/developer/task-t...y&id=179320 |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Так и есть...
Поставил версию Qt 4,5, парсер работает как надо |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |