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的时候觉得有些纠结之后才下载来看看的,也没有细看就,高深的东西吧,以后还要用到了再慢慢研究。







原创粉丝点击