使用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; } 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说的很清楚,我们可以清楚知道每一步在干吗。。。。。