原文地址:http://gdizcm.blog.163.com/blog/static/952036612012759953915/
最近接触到tinyxml,觉得用它来读取和创建xml还是挺方便的。为了防止自己以后忘记怎么使用,便把它们记录下来。
创建的xml文件名为testxml.xml,内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <BUSINESS ID="1" CODE="2" COUNT="num"> <PLANET>地球</PLANET> <COUNTRY>中国</COUNTRY> <RYXX> <COMPANY>高科技公司</COMPANY> <DEPT>创新部门</DEPT> <GRXX> <NAME>一二三</NAME> <GENDER>男</GENDER> <PHONE>123456</PHONE> </GRXX> <GRXX> <NAME>四五六</NAME> <GENDER>男</GENDER> <PHONE>345678</PHONE> </GRXX> </RYXX> </BUSINESS>
主文件名为testxml.cpp,内容如下:
#include <iostream> #include "tinyxml.h" #include "tinyxml.h" #include "tinystr.h" using namespace std; void creatXml(); void readxml(TiXmlElement *node); int main() { creatXml(); TiXmlDocument *myDocument = new TiXmlDocument("testxml.xml");//打开一个xml文件 myDocument->LoadFile(); TiXmlElement *node = myDocument->FirstChildElement();//返回当前节点的子节点 if(node == NULL)//若为空则返回 { return 0; }
readxml(node); return 0; }
void readxml(TiXmlElement *node) //读取xml文件 { while(node)//如果节点存在 { if(node->GetText()!=NULL)//如果内容不为空则输出 { cout<<node->Value()<<"="<<node->GetText()<<endl; }
TiXmlAttribute *attri = node->FirstAttribute();//获取节点的第一个属性,可以用LastAttribute()获取最后一个属性节点 while(attri!=NULL)//若属性不为空则输出 { cout<<attri->Name() <<"="<<attri->Value()<<endl; attri=attri->Next();//获取下一个属性节点 }
if(node->FirstChildElement() != NULL) { readxml(node->FirstChildElement());//若还有子节点,则进行递归调用 } node=node->NextSiblingElement(); if(!node) { break; } } }
void creatXml() //创建xml文件 { TiXmlDocument *myDocument = new TiXmlDocument();//创建一个根结点 TiXmlDeclaration *pDeclaration=new TiXmlDeclaration("1.0","UTF-8","");//创建xml文件头 myDocument->LinkEndChild(pDeclaration);//加入文件头 TiXmlElement *BUSINESS=new TiXmlElement("BUSINESS");//创建一个节点 BUSINESS->SetAttribute("ID","1");//创建节点的一个属性ID=1 BUSINESS->SetAttribute("CODE","2");//创建节点的另一个属性CODE=2 BUSINESS->SetAttribute("COUNT","num"); myDocument->LinkEndChild(BUSINESS);//加入BUSINESS节点 TiXmlElement *COUNTRY = new TiXmlElement("COUNTRY");//创建两个节点 TiXmlElement *PLANET = new TiXmlElement("PLANET");
BUSINESS->LinkEndChild(PLANET);//将新建的节点加到BUSINESS下一级 BUSINESS->LinkEndChild(COUNTRY); TiXmlText *PLANETtxt = new TiXmlText("地球");//添加节点内的文本 TiXmlText *COUNTRYtxt = new TiXmlText("中国"); COUNTRY->LinkEndChild(COUNTRYtxt); PLANET->LinkEndChild(PLANETtxt); TiXmlElement *RYXX = new TiXmlElement("RYXX"); BUSINESS->LinkEndChild(RYXX);//通过LinkEndChild添加子节点 TiXmlElement *COMPANY = new TiXmlElement("COMPANY"); RYXX->LinkEndChild(COMPANY);//为RYXX节点添加子节点 TiXmlText *COMPANYtxt = new TiXmlText("高科技公司"); COMPANY->LinkEndChild(COMPANYtxt);//为COMPANY节点添加文本 TiXmlElement *DEPT = new TiXmlElement("DEPT"); RYXX->LinkEndChild(DEPT);//为RYXX节点添加子节点 TiXmlText *DEPTtxt = new TiXmlText("创新部门"); DEPT->LinkEndChild(DEPTtxt);//为DEPT节点添加文本 TiXmlElement *GRXX = new TiXmlElement("GRXX"); RYXX->LinkEndChild(GRXX);//为RYXX节点添加子节点 TiXmlElement *NAME = new TiXmlElement("NAME"); GRXX->LinkEndChild(NAME);//为GRXX节点添加子节点 TiXmlText *NAMEtxt = new TiXmlText("一二三"); NAME->LinkEndChild(NAMEtxt);//为NAME节点添加文本 TiXmlElement *GENDER = new TiXmlElement("GENDER"); TiXmlElement *PHONE = new TiXmlElement("PHONE"); GRXX->LinkEndChild(GENDER);//为GRXX节点添加子节点 GRXX->LinkEndChild(PHONE);//为GRXX节点添加子节点
TiXmlText *GENDERtxt = new TiXmlText("男"); TiXmlText *PHONEtxt = new TiXmlText("123456"); GENDER->LinkEndChild(GENDERtxt);//为GENDER节点添加文本 PHONE->LinkEndChild(PHONEtxt);//为PHONE节点添加文本 TiXmlElement *GRXX1 = new TiXmlElement("GRXX"); RYXX->LinkEndChild(GRXX1);//为RYXX节点添加子节点 TiXmlElement *NAME1 = new TiXmlElement("NAME"); GRXX1->LinkEndChild(NAME1);//为GRXX1节点添加子节点 TiXmlText *NAME1txt = new TiXmlText("四五六"); NAME1->LinkEndChild(NAME1txt);//为NAME1节点添加文本 TiXmlElement *GENDER1 = new TiXmlElement("GENDER"); TiXmlElement *PHONE1 = new TiXmlElement("PHONE"); GRXX1->LinkEndChild(GENDER1);//为GRXX1节点添加子节点 GRXX1->LinkEndChild(PHONE1);//为GRXX1节点添加子节点 TiXmlText *GENDER1txt = new TiXmlText("男"); TiXmlText *PHONE1txt = new TiXmlText("345678"); GENDER1->LinkEndChild(GENDER1txt);//为GENDER1节点添加文本 PHONE1->LinkEndChild(PHONE1txt);//为PHONE1节点添加文本 myDocument->SaveFile("testxml.xml");//保存文件
/*如果要程序中还需要处理,可以保存到字符串中,将上面红字部分替换如下*/
/*
char *psXML=NULL; // 用来保存xml的字符串,可以放到函数参数里传递出去
TiXmlPrinter printer;
myDocument->Accept(&printer);
memset(psXML,0x0,sizeof(psXML));
memcpy(psXML,printer.CStr(),printer.Size());
*/ delete myDocument; myDocument = NULL; } (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|