tinyxml创建xml并读写

原文地址: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; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇