C++请求Web Service与XML解析

1. C++解析XML的开源库

在项目中XML的解析使用的是开源的第三方库,TinyXML;这个解析库的模型通过XML文件,然后再内存中生成DOM模型,从而让我们可以很方便的遍历这颗XML树。

DOM模型即文档对象模型,是将整个文档分成多个元素(如:书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。先看一下TinyXML中的主要类和XML文档之间的对应关系,下图是TinyXML中主要class的类图,反应各个类之间的静态关系。

C++ 设计新思维》 下载见

C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码

读C++ Primer 之构造函数陷阱

读C++ Primer 之智能指针

读C++ Primer 之句柄类

将C语言梳理一下,分布在以下10个章节中:

Linux-C成长之路(一):Linux下C编程概要

Linux-C成长之路(二):基本数据类型

Linux-C成长之路(三):基本IO函数操作

Linux-C成长之路(四):运算符

Linux-C成长之路(五):控制流

Linux-C成长之路(六):函数要义

Linux-C成长之路(七):数组与指针

Linux-C成长之路(八):存储类,动态内存

Linux-C成长之路(九):复合数据类型

Linux-C成长之路(十):其他高级议题

TiXmlBase是所有类的基类,TiXmlNode、TiXmlAttribute两个类都继承自TiXMLBase类,其中TiXmlNode类指的是所有被<...>...<.../>包括的内容,而xml中的节点又具体分为以下几方面内容,分别是声明、注释、节点以及节点间的文本,因此在TiXmlNode基础上又衍生出来这几个类TiXmlComment、TiXmlDeclaration、TiXmlDocument、TiXmlElement、TiXmlText、TiXmlUnknown,分别用来指明具体是xml中的哪一部分。TiXmlAttribute类不同于TiXmlNode,它指的是在尖括号里面的内容,像<...***=...>,其中***就是一个属性,这里采用一个XML文档具体说明一下:

1.<?xml version="1.0" encoding="UTF-8"?> 
2.<phonebook> 
3.    <!--one item behalfs one contacted person.--> 
4.    <item> 
5.        <name>miaomaio</name> 
6.    <addr>Shaanxi Xi'an</addr> 
7.    <tel>13759911917</tel> 
8.    <email>miaomiao@home.com</email> 
9.    </item> 
10.    <item> 
11.        <name>gougou</name> 
12.    <addr>Liaoning Shenyang</addr> 
13.    <tel>15840330481</tel> 
14.    <email>gougou@home.com</email> 
15.    </item> 
16.    <!--more contacted persons.--> 
16.  </phonebook> 

像TiXmlDeclaration指的就是,

像TiXmlComment指的就是、,

像TiXmlDocument指的就是整个xml文档,

像TiXmlElement指的就是

、、、等等这些节点,

像TiXmlText指的就是‘gougou’、‘15840330481’这些夹在与、与、与之间的文本文字,

像TiXmlAttribute指的就是节点中version、encoding,

除此之外就是TiXmlUnknown。

1) 读取XML文件

//!xml文件读取,模拟调用接口返回char *字符串
 filebuf *pbuf;
 ifstream filestr;
 long size;
 char *buffer;

filestr.open(XML_EXAMPLE_FILE_NAME, ios::binary);
 pbuf = filestr.rdbuf();
 size = pbuf->pubseekoff(0,ios::end,ios::in);
 pbuf->pubseekpos(0, ios::in);

buffer = new char[size];
 pbuf->sgetn(buffer, size);
 filestr.close();

//!从xml字符串中获取相关值
 string strCreationTime;
 string strJobId;
 string strJobType;
 string strJobName;
 string strJobLeader;

TiXmlDocument *xmlDocument = new TiXmlDocument();
 xmlDocument->Parse(buffer, 0, TIXML_DEFAULT_ENCODING);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e98e9ab534dd92a62722080e0ff623fa.html