第二项 XML的构建与解析来自Tinyxml
2017-10-27 13:57
197 查看
第二项 XML的构建与解析来自Tinyxml
一、TinyXml
TinyXml是一款非常小巧,功能强大的C++类库,使用非常简单,仅需拷贝几个文件到工程中就能运行。
TinyXml使用文档对象模型(DOM)来解析xml文件,这种模型的处理方式为在分析时,一次性的将整
个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树
结构。这种方式占用内存大,但可以给用户提供一个面向对象的访问接口,对用户更为友好,非常方便用
户使用。下面我们依次来介绍各个类的用法。
TinyXml的结构入下图所示
二、TinyXml相关类
TiXmlBase是一个基类,是所有tinyxml中的对象的公共基类,实现了一些tinyxml该有的公共操作,比如字符编码转换,另外还定义了一些公共的数据结构,比如错误类型等。
TiXmlNode:是DOM树中结点元素的基类型。它定义了DOM树结点的一些特征数据以及一些相关的操作。它定义了xml文件几乎所有操作的函数原型,是文件主要元素的基类。
(1)TiXmlDocument:对应于XML文档整体的一个对象,一棵DOM的根结点是TiXmlDocument类型,而且基它结点不能为TiXmlDocument类型。
(2)TiXmlDeclaration:对应于XML文档开始部分声明部分的对象,它主要包含version,encode, standalone三个方面的数据信息以及相关的操作。
(3)TiXmlComment:对应于XML文档中的注释部分的对象,它主要包含注释的内容以及相关的操作。
(4)TiXmlElement:对应于XML文档中普通的元素的对象,每个元素有一个对应的名字,另外还可以有一些属性。TiXmlElement包含了这些相关信息及其操作。
(5)TiXmlText:对应于XML文档中元素中的文本信息的对象,它实现了文本信息相关的操作。
TiXmlAttributeSet:XML文档中某个元素的所有属性的集合,它是TiXmlElement的一部分,它用来管理该元素的所有属性。
TiXmlAttribute:XML文档中的元素的属性所对应的对象。它是一个name-value pair对象,name是属性名,value是属性值。(TiXmlAttributeSet成员之一)
三、xml构建
struct结构转成xml字符串。
在网络传输通信有的时候为了方便开发者开发与维护产品,有的时候会结合xml这种纯文本的协议进行传输,可以直观的在抓包中展现数据。PS:相关文本数据还有json,这些虽然比较直观,但是承担了较大的传输开销。
一、TinyXml
TinyXml是一款非常小巧,功能强大的C++类库,使用非常简单,仅需拷贝几个文件到工程中就能运行。
TinyXml使用文档对象模型(DOM)来解析xml文件,这种模型的处理方式为在分析时,一次性的将整
个XML文档进行分析,并在内存中形成对应的树结构,同时,向用户提供一系列的接口来访问和编辑该树
结构。这种方式占用内存大,但可以给用户提供一个面向对象的访问接口,对用户更为友好,非常方便用
户使用。下面我们依次来介绍各个类的用法。
TinyXml的结构入下图所示
二、TinyXml相关类
TiXmlBase是一个基类,是所有tinyxml中的对象的公共基类,实现了一些tinyxml该有的公共操作,比如字符编码转换,另外还定义了一些公共的数据结构,比如错误类型等。
TiXmlNode:是DOM树中结点元素的基类型。它定义了DOM树结点的一些特征数据以及一些相关的操作。它定义了xml文件几乎所有操作的函数原型,是文件主要元素的基类。
(1)TiXmlDocument:对应于XML文档整体的一个对象,一棵DOM的根结点是TiXmlDocument类型,而且基它结点不能为TiXmlDocument类型。
(2)TiXmlDeclaration:对应于XML文档开始部分声明部分的对象,它主要包含version,encode, standalone三个方面的数据信息以及相关的操作。
(3)TiXmlComment:对应于XML文档中的注释部分的对象,它主要包含注释的内容以及相关的操作。
(4)TiXmlElement:对应于XML文档中普通的元素的对象,每个元素有一个对应的名字,另外还可以有一些属性。TiXmlElement包含了这些相关信息及其操作。
(5)TiXmlText:对应于XML文档中元素中的文本信息的对象,它实现了文本信息相关的操作。
TiXmlAttributeSet:XML文档中某个元素的所有属性的集合,它是TiXmlElement的一部分,它用来管理该元素的所有属性。
TiXmlAttribute:XML文档中的元素的属性所对应的对象。它是一个name-value pair对象,name是属性名,value是属性值。(TiXmlAttributeSet成员之一)
三、xml构建
struct结构转成xml字符串。
struct Person { char name[4]; int age; struct Person(){ memset(this, 0, sizeof(this));} }; void GetxmlFStruct(char *bufxml) { struct Person tperson; tperson.age = 25; strcpy(tperson.name, "wyf"); //创建一个XML的文档对象。 // TiXmlDocument *myDocument = new TiXmlDocument(); //创建一个根元素并连接。 TiXmlElement *PersonElement = new TiXmlElement("Person"); // myDocument->LinkEndChild(PersonElement); //创建一个name元素并连接。 TiXmlElement *nameElement = new TiXmlElement("name"); PersonElement->LinkEndChild(nameElement); TiXmlElement *AgeElement = new TiXmlElement("age"); PersonElement->LinkEndChild(AgeElement); //设置name元素和age元素的内容并连接。 TiXmlText *NameContent = new TiXmlText(tperson.name); char buf[10]= {0}; itoa(tperson.age, buf, 10); TiXmlText *AgeContent = new TiXmlText(buf); nameElement->LinkEndChild(NameContent); AgeElement->LinkEndChild(AgeContent); // PersonElement->Print(stdout); TiXmlPrinter myPrint; PersonElement->Accept(&myPrint); strncpy(bufxml, myPrint.CStr(), strlen(myPrint.CStr()) ); } 四、xml解析 将构建成的xml还原成struct char bufxml[1024] = {0}; GetxmlFStruct(bufxml); printf("%s\n", bufxml); TiXmlDocument myDocument; myDocument.Parse(bufxml); TiXmlElement *PersonsElement = myDocument.RootElement(); TiXmlElement *NameElement = PersonsElement->FirstChildElement(); TiXmlElement *AgeElement = NameElement->NextSiblingElement(); struct Person tperson; tperson.age = atoi(AgeElement->FirstChild()->Value()); strcpy(tperson.name, NameElement->FirstChild()->Value()); printf("%d\n", tperson.age); printf("%s\n", tperson.name);
相关文章推荐
- TinyXML解析word图片
- C++ XML解析之TinyXML篇【转】
- xml构建是解析
- tinyxml源码解析(上)
- tinyxml非常好的实例 --c++解析XML
- 实战 Groovy: 构建和解析 XML
- C++ XML解析之tinyxml
- tinyxml解析配置文件
- xml快速入门(tinyxml解析)
- C++ tinyXml直接解析XML字符串
- TinyXML(C++ XML解析库)
- C++ XML解析之TinyXML篇(转载)
- Tinyxml解析XML格式的文件
- tinyxml(三)——简单的生成和解析示例
- 自动化测试项目——XML解析:TinyXml
- c++ 解析xml的小工具tinyxml
- tinyxml 解析XML字符串,可加载远程XML
- TinyXml解析复杂xml字符串总结
- tinyxml解析内存中的字符串缓冲区
- C++ XML解析之TinyXML篇