我正在开发一个应用程序,在创建Web服务之后,我从XML标记中的服务器获得了响应。
回应:
<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n
<string...... /\">Hello World</string>
我想只阅读“Hello World”字符串。 我应该如何解析它?
答案 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模块。
答案 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”属性中。