這篇文章給大家分享的是有關(guān) Qt如何解析XML的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

如何使用QXmlStreamReader來解析格式良好的XML,Qt的文檔中指出,它是一種更快、更方便的Qt自己的SAX解析器(QXmlSimpleReader)的替代,它也較快,在某種情況下,比DOM(QDomDocument)更方便。
XML文件:

解析方法:
void ParseXML::parseXML(QString file_name)
{
if(file_name.isEmpty())
return;
QFile *file = new QFile(file_name);
if(!file->open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::information(NULL, QString("title"), QString("open error!"));
return;
}
//QXmlStreamReader操作任何QIODevice.
QXmlStreamReader xml(file);
QList> persons;
//解析XML,直到結(jié)束
while(!xml.atEnd() && !xml.hasError())
{
//讀取下一個element.
QXmlStreamReader::TokenType token = xml.readNext();
//如果獲取的僅為StartDocument,則進行下一個
if(token == QXmlStreamReader::StartDocument)
{
continue;
}
//如果獲取了StartElement,則嘗試讀取
if(token == QXmlStreamReader::StartElement)
{
//如果為persons,直接進入下一個
if(xml.name() == "persons")
{
continue;
}
//如果為person,則對其進行解析
if(xml.name() == "person")
{
persons.append(this->parsePerson(xml));
}
}
}
if(xml.hasError())
{
QMessageBox::information(NULL, QString("parseXML"), xml.errorString());
}
//從reader中刪除所有設(shè)備、數(shù)據(jù),并將其重置為初始狀態(tài)
xml.clear();
}
QMap ParseXML::parsePerson(QXmlStreamReader& xml)
{
QMap person;
//檢查是否獲取person
if(xml.tokenType() != QXmlStreamReader::StartElement &&
xml.name() == "person")
{
return person;
}
//獲取person屬性
QXmlStreamAttributes attributes = xml.attributes();
if(attributes.hasAttribute("id"))
{
person["id"] = attributes.value("id").toString();
}
//操作下一個
xml.readNext();
while(!(xml.tokenType() == QXmlStreamReader::EndElement &&
xml.name() == "person"))
{
if(xml.tokenType() == QXmlStreamReader::StartElement)
{
if(xml.name() == "name")
{
this->addElementDataToMap(xml, person);
}
if(xml.name() == "age")
{
this->addElementDataToMap(xml, person);
}
if(xml.name() == "email")
{
this->addElementDataToMap(xml, person);
}
if(xml.name() == "website")
{
this->addElementDataToMap(xml, person);
}
}
xml.readNext();
}
QString id = person["id"];
QString name = person["name"];
QString age = person["age"];
QString email = person["email"];
QString website = person["website"];
return person;
}
void ParseXML::addElementDataToMap(QXmlStreamReader& xml,
QMap& map) const
{
if(xml.tokenType() != QXmlStreamReader::StartElement)
{
return;
}
QString elementName = xml.name().toString();
xml.readNext();
if(xml.tokenType() != QXmlStreamReader::Characters)
{
return;
}
map.insert(elementName, xml.text().toString());
}感謝各位的閱讀!關(guān)于“ Qt如何解析XML”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
當(dāng)前文章:Qt如何解析XML-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article28/ddpsjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、品牌網(wǎng)站設(shè)計、網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容