Как разобрать строку XML в Qt - PullRequest
5 голосов
/ 15 июля 2010

Я разрабатываю приложение, в котором после создания веб-службы я получил ответ от сервера, который находится в теге XML.

Ответ:

<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n
<string...... /\">Hello World</string>

Я хочу прочитать только строку "Hello World". Как мне разобрать это?

Ответы [ 5 ]

18 голосов
/ 06 сентября 2010

Надеюсь, это поможет:

QByteArray xmlText;
//Get your xml into xmlText(you can use QString instead og QByteArray)
QDomDocument doc;
doc.setContent(xmlText);
QDomNodeList list=doc.elementsByName("string");
QString helloWorld=list.at(0).toElement().text();
1 голос
/ 05 апреля 2013

попробуй это ...!

QFile* file = new QFile(fileName);
if (!file->open(QIODevice::ReadOnly | QIODevice::Text))
{
     QMessageBox::critical(this, "QXSRExample::ReadXMLFile", "Couldn't open xml file", QMessageBox::Ok);
     return;
}

QXmlStreamReader xml(file);
QXmlStreamReader::TokenType token;
while(!xml.atEnd() && !xml.hasError())
{
    /* Read next element.*/
    token = xml.readNext();
    /* If token is just StartDocument, we'll go to next.*/
    if(token == QXmlStreamReader::StartDocument)
        continue;


 if(token == QXmlStreamReader::Characters)
     QMessage::information(this,"all text", xml.text().toString());
 continue;
}
1 голос
/ 06 сентября 2010

Лучший способ - использовать модуль Qt XML Patterns.

http://doc.qt.io/archives/4.6/qxmlquery.html

0 голосов
/ 11 марта 2014

Я написал простую оболочку для некоторых классов QDom *, которая упрощает работу с XML в Qt.

Например:

myxmlmap->$("tagnameq1")->$("tagname2.")->$("@attrname=attrvalue*").c.length()

Или даже так:

myxmlmap->$("tagname1>tagname2.>@attrname=attrvalue*").c.at(2).e.text()

"*" - все дочерние элементы в дереве из текущего узла.""- только дети 1-го поколения.e - элемент узла.c - список дочерних узлов.все найденные дети также хранятся в атрибуте "c".

0 голосов
/ 27 июля 2010

Вы можете использовать QString :: replace (const QString & before, const QString & after, Qt :: CaseSensitivity cs = Qt :: CaseSensitive) заменить токены XML пробелами.

Если XML-теги, которые вы будете получать, могут быть разными, я бы предложил вам реализовать обработчик XML , чтобы иметь возможность вырезать теги XML из вашей строки.

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