使用第三方TinyXml类库解析XML文件

September 28th, 2013 by JasonLe's Tech Leave a reply »

使用tinyxml解析xml数据相比QDOM差不多是相同的,但是TinyXML更加通用。所以应用范围更广。下面来介绍这个类库。


<TRANS_ADDRESS>
 <HEAD>
 <VERSION>0.1</VERSION>
 <MESSAGEID>0</MESSAGEID>
 </HEAD>
 <ACTION>
 <GET_ADDRESS>-1</GET_ADDRESS>
 </ACTION>
</TRANS_MESSAGE>

使用这些类库,我们要看清楚每个标签页的层级关系,是child还是nextchild。这个是根据上面的xml文件,写的读该类型xml数据的函数,大家认真看一下,应该可以看懂。


bool xmlparse::Read_TRANS_GET_ADDRESS_XmlFile(QString& szFileName)
{
 try
 {
 //创建一个XML的文档对象。
 TiXmlDocument *myDocument = new TiXmlDocument(szFileName.toStdString().c_str());
 myDocument->LoadFile();
 //获得根元素.
 TiXmlElement *RootElement = myDocument->RootElement();

//qDebug() << RootElement->Value() ;

TiXmlElement *HEAD = RootElement->FirstChildElement();

TiXmlElement *VERSION = HEAD->FirstChildElement();
 TiXmlElement *MESSAGEID = VERSION->NextSiblingElement();

TiXmlElement *ACTION = HEAD->NextSiblingElement();
 TiXmlElement *GET_ADDRESS = ACTION->FirstChildElement();

qDebug() << VERSION->FirstChild()->Value() ;
 qDebug() << MESSAGEID->FirstChild()->Value() ;

qDebug() << GET_ADDRESS->FirstChild()->Value() ;

}
 catch (QString& e)
 {
 return false;
 }
 return true;
}

&nbsp;

bool xmlparse::Create_TRANS_GET_ADDRESS_XmlFile(QString& szFileName)
{
 try
 {
 TiXmlDocument *myDocument = new TiXmlDocument();
 //创建一个根元素并连接。
 TiXmlElement *RootElement = new TiXmlElement("TRANS_ADDRESS");
 myDocument->LinkEndChild(RootElement);

TiXmlElement *HEAD = new TiXmlElement("HEAD");
 RootElement->LinkEndChild(HEAD);

//PersonElement->SetAttribute("ID", "1");

TiXmlElement *VERSION = new TiXmlElement("VERSION");
 TiXmlElement *MESSAGEID = new TiXmlElement("MESSAGEID");
 HEAD->LinkEndChild(VERSION);
 HEAD->LinkEndChild(MESSAGEID);
 TiXmlText *VERSIONTEXT = new TiXmlText("0.1");

TiXmlText *MESSAGEIDTEXT = new TiXmlText("0");

VERSION->LinkEndChild(VERSIONTEXT);
 MESSAGEID->LinkEndChild(MESSAGEIDTEXT);

TiXmlElement *ACTION = new TiXmlElement("ACTION");
 RootElement->LinkEndChild(ACTION);

TiXmlElement *GET_ADDRESS = new TiXmlElement("GET_ADDRESS");
 ACTION->LinkEndChild(GET_ADDRESS);
 TiXmlText *ADDRESSTEXT = new TiXmlText("-1");
 GET_ADDRESS->LinkEndChild(ADDRESSTEXT);

myDocument->SaveFile(szFileName.toStdString().c_str());//保存到文件
 }
 catch (QString& e)
 {
 return false;
 }
 return true;
}

大家只要体会一下,应该都可以理解,每个API说的很清楚,我们可以清楚知道每一步在干吗。。。。。