Задача - сабж. Т.к. файл большой было решено воспользоваться SAX-парсером и сгненерённым заранее вспомогательным файлом следующей структуры:
номер элемента1, смещение относительно начала в xml-файле1
номер элемента2, смещение относительно начала в xml-файле2
....
Тогда n-ый элемент можно получить через XmlSimpleReader, в качестве источника данных для XmlInputSource использовать QString, который вычитывать из xml-файлы начиная с позиции n-ого элемента до позиции n+1-ого элемента через QIODevice. И вроде бы эта далеко не оптимальная схема работает, но..
1. Она не оптимальна ж). Хотелось бы как-нибудь без ненужных промежуточных данных (файл с индексами не в счёт) сделать один раз и навсегда QXmlInputSource(sourceDevice) и вперёд!.. Но так не получается, т.к. нужно вычитывать по одному элементу, а парсер норовит вычитать всё, что он в этом QIODevice найдёт. Причём если начало вычитывания я задать могу (?) через seek(), но вот как задать конец?..
2. Хотелось бы как-нибудь задействовать QTextStream для автоматического распознавания/задания вручную кодировки перед вычитыванием нужного элемента. К тому же QTextStream значительно быстрее чем чистый QIODevice.
Большая просьба всем тем, кто сталкивался с подобной задачей высказать свои соображения. ж)
Сразу вдогонку другой вопрос по этой же теме. Получил я из файла злосчастный xml элемент, запихал его данные и атрибуты в какой-нибудь объект, и теперь хотел бы его вывести в QTextEdit. Для этого делается следующее:
QTextControlElement* el = document->element(i);
QTextBlockFormat bf;
QTextCharFormat bcf;
bcf.setAnchor(true);
bcf.setAnchorName(QString::number(i));
cursor->insertBlock(bf, bcf);
cursor->insertText(el->text());
Вопрос: можно ли эту конструкцию как-нибудь ускорить? Или может быть тоже самое можно сделать как-то по-другому, но чтобы работало быстрее?.. ж)