XML-файл из интернета и Qt - PullRequest
2 голосов
/ 01 апреля 2011

Я хочу проанализировать некоторый XML-файл в Qt, но этот файл находится на каком-то сервере в сети. Когда я использовал QML, я мог использовать класс XMLHttpRequest, который принимает адрес файла в интернете (что мне нужно).

У меня есть только одна идея: использовать сетевой запрос и загрузить этот XML напрямую. Идея в том, что в qt есть специальный интерфейс для парсера XML, который берет xml-путь из интернета?

Ответы [ 3 ]

10 голосов
/ 01 апреля 2011

Как я знаю, вы должны скачать его. QHttp предоставляет простой способ загрузить его во временный файл.

QTemporaryFile temp_file;
QHttp http("example.com");
http.get("/your.xml",&temp_file);

Новая версия (на основе QNetworkAccessManager ):

QNetworkAccessManager * manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(fileIsReady(QNetworkReply*)) );
manager->get(QNetworkRequest(QUrl("http://example.com/your.xml")));
...
void fileIsReady( QNetworkReply * reply)
{
  QTemporaryFile temp_file;
  temp_file.write(reply->readAll());
}
1 голос
/ 01 апреля 2011

QtXML не работает самостоятельно.Он работает на QIODevices, который является универсальным интерфейсом для всего, что делает ввод / вывод (файлы, сетевые сокеты, ...).Вы можете либо загрузить XML-файл во временный файл, а затем проанализировать его, либо, если вы анализируете пошагово, например, используя QXmlStreamReader, анализировать данные непосредственно по мере их поступления:

QNetworkAccessManager *manager = new QNetworkAccessManager( this );
QNetworkReply* reply = QNetworkAccessManager::get( manager->get( QNetworkRequest( QUrl("http://www.foo.com/example.xml") ) ) ;
QXmlStreamReader reader( reply );
//...parse

Обратите внимание, что QXmlStreamReader :: PrematureEndOfDocumentError s может возникнуть при разборе, если недостаточно загруженных данных.Вы можете либо подключиться к сигналу readyRead () ответа, чтобы продолжить, либо использовать reply-> waitForReadyRead (), если вы анализируете вне потока пользовательского интерфейса.

1 голос
/ 01 апреля 2011

Я не знаю, как загрузить файл напрямую из QXML, я думаю, вам следует сначала загрузить свой ресурс с помощью QNetwork, а затем проанализировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...