C/C++开源库——TinyXml
来源:互联网 发布:智慧镇江网络错误 编辑:程序博客网 时间:2024/05/17 20:23
TinyXml一个小巧简单的C++版本XML解析器,他非常容易的引入到你的项目中使用,使用他可以很简单的进行XML操作,修改编辑保存等。
TinyXml官网地址:http://sourceforge.net/projects/tinyxml/
下载到源码除了一个xmltest.cpp是该项目的测试文件之外,还有5个项目必须的源码文件,具体自己下载到代码再看。
首先,看一下tinyxml主要的类结构:
TiXmlVBase类:是所有tinyxml类的基类。
TiXmlAttribute类:XML属性,是一个键值对。
TiXmlNode类:是DOM中的所有对象的父类。
TiXmlComment类:XML文档中的注释。
TiXmlDeclaration类:XML文档中的申明,一般位于XML文档的第一行,如:
<?xml version="1.0" standalone="yes"?>TiXmlDocument类:XML文档操作,可以保存、装载、打印到屏幕等。
TiXmlElement类:该类是一个容器类,包括元素名称、其中还包含一些其他的元素、文本、注释等,也可以包含一些乱七八糟的属性。
TiXmlText类:XML文本。
TiXmlUnknown类:一些不能被XML识别的标签则认为是Unknown,如果一个标签是文本,则不能被修改。
TinyXml中若是要使用STL则需要加入编译宏的定义到tinyxml.h文件中的第一行,如下:
#define TIXML_USE_STL
一、新建XML,添加数据并保存成XML文档
int main(){TiXmlDocument *doc =new TiXmlDocument;//创建一个根节点坐标系统TiXmlElement *root = new TiXmlElement("CoordinateSystem");//设置文档的根节点doc->LinkEndChild(root);//添加类型节点TiXmlElement *typeEle = new TiXmlElement("Type");root->LinkEndChild(typeEle);TiXmlText *rootTxt = new TiXmlText("1");typeEle->LinkEndChild(rootTxt);//添加地理坐标系节点TiXmlElement *geographicEle = new TiXmlElement("Geographic");root->LinkEndChild(geographicEle);//为地理坐标系节点添加Name节点TiXmlElement *geonameEle = new TiXmlElement("Name");geographicEle->LinkEndChild(geonameEle);//设置地理坐标系名称TiXmlText *geonameTxt = new TiXmlText("IGG75");geonameEle->LinkEndChild(geonameTxt);//为地理坐标系节点添加参考面节点TiXmlElement *datumEle = new TiXmlElement("Datum");geographicEle->LinkEndChild(datumEle);//设置地理坐标系的参考面TiXmlText *datumTxt = new TiXmlText("Xian80");datumEle->LinkEndChild(datumTxt);//为地理坐标系节点添加椭球节点TiXmlElement *sphereEle = new TiXmlElement("Spheroid");geographicEle->LinkEndChild(sphereEle);//为椭球节点下面添加椭球长洲半径节点TiXmlElement *aEle = new TiXmlElement("a");sphereEle->LinkEndChild(aEle);TiXmlText *aTxt = new TiXmlText("6378140");aEle->LinkEndChild(aTxt);//为椭球节点下面添加椭球反扁率节点TiXmlElement *fEle = new TiXmlElement("f");sphereEle->LinkEndChild(fEle);TiXmlText *fTxt = new TiXmlText("298.257");fEle->LinkEndChild(fTxt);//添加投影坐标系节点TiXmlElement *prjEle = new TiXmlElement("Projection");root->LinkEndChild(prjEle);//保存成XML文档doc->SaveFile("C:\\test.xml");delete doc;return 0;}
产生的文档如下:
<CoordinateSystem> <Type>1</Type> <Geographic> <Name>IGG75</Name> <Datum>Xian80</Datum> <Spheroid> <a>6378140</a> <f>298.257</f> </Spheroid> </Geographic> <Projection /></CoordinateSystem>
二、加载文档,查找节点并读取数据
int main(){TiXmlDocument *doc = new TiXmlDocument("C:\\test.xml");doc->LoadFile();// 根节点TiXmlElement *root = doc->RootElement();//根节点下的第一个节点TiXmlElement *coodinateEle = (TiXmlElement *)doc->FirstChild();//根节点下的第一个节点的值,返回值是“Type”const char* c = coodinateEle->FirstChild()->Value();//根节点下的第一个节点的第一个兄弟节点的子节点的子节点的值,返回值是“IGG75”const char* cc = coodinateEle->FirstChild()->NextSibling()->FirstChild()->FirstChild()->Value();//寻找指定名称的第一个节点,并获取他的值,若是没有找到返回值为NULL,此处返回值是“Projection”const char* ccc = coodinateEle->FirstChild("Projection")->Value();delete doc;return 0;}
写了两个小小的Demo测试一下,发现这个库还是比较简单的,由于项目比较忙也就不想做深入研究了,什么性能的,等需要的时候再去看看吧,这里先混个眼熟,做个笔记。
PS:这个库也是昨天项目中要解析XML使用的CMarkupMSXML的时候觉得有些纠结之后才下载来看看的,也没有细看就,高深的东西吧,以后还要用到了再慢慢研究。
- C/C++开源库——TinyXml
- TinyXML(C++)
- C++:tinyxml的使用
- tinyxml的使用方法(c++)
- [C++]使用TinyXml讀寫Xml
- TinyXML c++XML解析器
- [xml/c/c++] TinyXML中文文档
- 【C++】【TinyXml】xml文件的读写功能使用——写xml文件
- TinyXML来操作XML文件(C++)
- c++builder 调用tinyXML读写XML文件
- C++TinyXml读取解析xml文件
- C+++Utf8字符转换Gb2312编码,解决TinyXml中文乱码
- c/c++ XML 读写 tinyXML rapidXML slimXML LibXML XMLBooster squashXML
- TinyXML来操作XML文件(C++)<二>
- TinyXML:一个优秀的C++ XML…
- C++ XML解析之TinyXML篇【转】
- 【C/C++开发】TinyXml操作(含源码下载)
- C++——C/C++static关键字
- ActionBar与ActionMode初体验
- cocos2d-iphone之魔塔20层
- pat 1033 To Fill or Not to Fill(值得重点回顾)
- HTML5 – 一个拖拽功能的例子
- 2_20130306_UI需要修改的地方
- C/C++开源库——TinyXml
- iOS-raywenderlich翻译-使用MapKit叠加图层
- Android实用代码七段
- 获得心灵安宁的7个技巧
- Android之ActionBar学习
- 东野圭吾《流星之绊》读后感
- 如何获取某字符串的子字符串
- android setbackgroundresource changes padding
- MFC序列化(serial)简单例子