TinyXml是一个基于DOM模型的、非验证的轻量级C++解释器。
下载地址:https://sourceforge.net/projects/tinyxml/
我下载的是tinyxml_2_6_2.zip,解压出来如下图:
将这里面的所有.h和.cpp复制到你的工程下就可以了,不需要链接库。
2.1 需要解析的xml
<phonebook>
<item>
<name>xiaomingname>
<addr>chengduaddr>
<tel>15884470211tel>
<email>[email protected]email>
item>
<item>
<name>xiaohuaname>
<addr>beijingaddr>
<tel>15840330481tel>
<email>[email protected]email>
item>
phonebook>
2.2 myxml.h头文件
#ifndef _MYXML_H_
#define _MYXML_H_
#include "tinyxml/tinyxml.h"
#include
#include
using namespace std;
class ParserXml{
public:
ParserXml(const string& filename);
bool Parser();
private:
TiXmlDocument doc;
};
#endif //_MYXML_H_
2.3 myxml.cpp实现文件
#include "myxml.h"
ParserXml::ParserXml(const string& filename){
doc = filename.c_str();
}
bool ParserXml::Parser(){
bool loadOkay = doc.LoadFile();
if(!loadOkay){
cout<<"load xml file error"<return false;
}
TiXmlElement* root = doc.RootElement();
cout<<"-------contact person info-------"<for(TiXmlNode* item= root->FirstChild("item");item;
item = item->NextSibling("item")){
TiXmlNode* child = item->FirstChild();
const char* name = child->ToElement()->GetText();
if(name){
cout<<"name:"<IterateChildren(child);
const char* addr = child->ToElement()->GetText();
if (addr) {
cout<<"addr:"<IterateChildren(child);
const char* tel = child->ToElement()->GetText();
if (tel)
cout<<"tel:"<IterateChildren(child);
const char* email = child->ToElement()->GetText();
if(email)
cout<<"email:"<return true;
}
2.4 test.cpp
#include "tinyxml/tinyxml.h"
#include
#include "myxml.h"
using namespace std;
int main(){
string filePath = "test.xml";
ParserXml pxml(filePath);
bool okflag = pxml.Parser();
if(!okflag)
return -1;
return 0;
}