如何在Qt中解析XML字符串

时间:2010-07-15 11:48:48

标签: xml qt

我正在开发一个应用程序,在创建Web服务之后,我从XML标记中的服务器获得了响应。

回应:

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

我想只阅读“Hello World”字符串。 我应该如何解析它?

5 个答案:

答案 0 :(得分:18)

我希望这会有所帮助:

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 :(得分:1)

最好的方法是使用Qt的XML Patterns模块。

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

答案 2 :(得分:1)

试试这个......!

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;
}

答案 3 :(得分:0)

您可以使用QString :: replace ( const QString & before, const QString & after, Qt::CaseSensitivity cs = Qt::CaseSensitive ) 用空格替换XML令牌。

如果你要接收的XML标签可能很多,我建议你实现一个XML handler,以便从你的字符串中剥离XML标签。

答案 4 :(得分:0)

我在一些QDom *类上编写了一个简单的包装器,这使得在Qt中使用XML变得更加容易。

例如:

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

甚至那样:

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

“*” - 来自当前节点的树中的所有子节点。 “” - 只有第1代儿童。 电子节点元素。 c - 节点子节点列表。所有找到的孩子也存储在“c”属性中。