Russian Qt Forum

Qt => XML => Тема начата: 17dufa от Январь 17, 2008, 16:38



Название: прервать SAX
Отправлено: 17dufa от Январь 17, 2008, 16:38
Здраствуйте,
есть задача: пришел xml, надо найти в нем одно поле, прочитать значение и в зависимости от содержимого произвести некоторые действия перед отсылкой его далее. Потенциально xml могут приходить большие, строить по ним DOM - тратить кучу памяти в пустую. Так как поле лежит почти в самом начале xml есть идея использовать SAX, причем так, чтоб дойти до этого поля, и потом прервать анализ, есть ли какие-нибудь способы прервать анализ?
кажется достаточно в EndElement выдать false?


Название: Re: прервать SAX
Отправлено: Alex03 от Январь 18, 2008, 07:59
Возможно обещанные в 4.4 XPath и XQuery Вам более помогут. :)


Название: Re: прервать SAX
Отправлено: Tonal от Январь 18, 2008, 10:58
кажется достаточно в EndElement выдать false?
Читаем ассистента:
Цитировать
bool QXmlContentHandler::endElement...
...
If this function returns false the reader stops parsing and reports an error.
...
Так что пойдёт, только нужно как-то отличить такой останов от ошибки.
Но это можно сделать с помощью errorString.

2 Alex03 Хотя теоретически ничего вроде не мешает сделать XSLT, XPath, XQuery на SAX-е, но, насколько мне известно (поправьте если ошибаюсь), они делаются таки на DOM-е, так что при их использовании документ всё же грузиться в память весь. :-(