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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.1 - компонент для показа больших xml-файлов  (Прочитано 3578 раз)
ElderOrb
Гость
« : Январь 23, 2006, 23:22 »

Задача - сабж. Т.к. файл большой было решено воспользоваться 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());


Вопрос: можно ли эту конструкцию как-нибудь ускорить? Или может быть тоже самое можно сделать как-то по-другому, но чтобы работало быстрее?.. ж)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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