Скопировано отсюда http://pavelk.ru/qt-qxmlquery
Небольшой примерчик как работать с QXmlQuery
Пример xml файла для парсинга:
Парсинг файла
Добавим в файл проекта (*.pro)
QT += xmlpatterns
Небольшой примерчик как работать с QXmlQuery
Пример xml файла для парсинга:
<?xml version="1.0" encoding="utf-8"?>
<root>
<lot gid="10">
<id>141</id>
<description>Наши контакты</description>
<images>
<img />LOTS/contakt.png
</images>
</lot>
.....
</root>
<root>
<lot gid="10">
<id>141</id>
<description>Наши контакты</description>
<images>
<img />LOTS/contakt.png
</images>
</lot>
.....
</root>
Парсинг файла
Добавим в файл проекта (*.pro)
QT += xmlpatterns
#include <qtxml>
#include <qxmlquery>
#include <qtxmlpatterns>
#include <qtdebug>
#include <qxmlquery>
#include <qtxmlpatterns>
#include <qtdebug>
QFile file("data.xml");
if (!file.open(QIODevice::ReadOnly)) {
qDebug()<<"file not opened!";< return;
}
QXmlQuery xmlQuery;
xmlQuery.bindVariable("myDocument", &file);
xmlQuery.setQuery("doc($myDocument)/root/lot[2]/description/string()"); //-- если не указать /string() то вернётся xml с тэгами
if(!xmlQuery.isValid()) {
qDebug()<<"xml not valid";
return ;
}
//-- выводим результат
QString res;
xmlQuery.evaluateTo(&res); //-- приводим результат к строке
qDebug()<<"RES:"<<res;
if (!file.open(QIODevice::ReadOnly)) {
qDebug()<<"file not opened!";< return;
}
QXmlQuery xmlQuery;
xmlQuery.bindVariable("myDocument", &file);
xmlQuery.setQuery("doc($myDocument)/root/lot[2]/description/string()"); //-- если не указать /string() то вернётся xml с тэгами
if(!xmlQuery.isValid()) {
qDebug()<<"xml not valid";
return ;
}
//-- выводим результат
QString res;
xmlQuery.evaluateTo(&res); //-- приводим результат к строке
qDebug()<<"RES:"<<res;
Для парсинга из строки
QByteArray byteArray = "<?xml version="1.0" encoding="utf-8"?><root><lot gid="10"><description>Наши контакты</description></lot></root>";
QBuffer buffer( &byteArray );
buffer.open( QIODevice::ReadOnly );
xmlQuery.bindVariable("myDocument", &buffer);
QBuffer buffer( &byteArray );
buffer.open( QIODevice::ReadOnly );
xmlQuery.bindVariable("myDocument", &buffer);
Комментариев нет:
Отправить комментарий