随着网络的不断扩张,网络数据变得纷繁复杂,网络交互的复杂性也越来越高
为了快速而简洁进行网络数据交互->各种各样的网络数据格式应运而生
从HTML -> XML -> JSON ...不断推陈出新..
重点是快速学习一个新的数据格式
1.Json(基于JsonCPP)
格式全称 JavaScript Object Notation
格式特点:
1、与开发语言无关
2、轻量级的数据存储格式
3、易于解析和封装
4、数据对象内部一般采用key-value模式来存储
5、支持数组、字符串、整数、小数、对象、布尔、空
6、可以用于数据传输、数据保存、数据交换
格式:
{
"name":"张三",
"age":21,
"身高":180,
"生日":"2000.01.01",
"学校":"北大青鸟",
"专业":["厨师","挖掘机"],
"单身":true,
"地址":null,
"好友":{...}
}
项目编译:(编译成库)
不使用预编译头
使用:
1、包含头文件
2、包含库文件
3、使用Reader、Value类
Xml(基于.COM)
COM
组件化解决的问题是拿来就用,不需要太多的额外编译,就能进行适配
仅仅引用头文件,加上一个可运行的程序,就可以到处使用,随时引用
甚至不要头文件,直接拿来用
COM里面有接口规范,可以通过接口查询方法
有一个本地COM服务(微服务器),COM控件需要先注册后使用(dll库、ocx库)
ActiveX 把 COM 升级为 DCOM
MSXML 对应的头文件<msxml2.h>
IXMLDOMNode
IXMLDOMNodeList
IXMLDOMDocument2
/*头文件中,不能定义全局变量(除非加extern) 和 实现静态成员变量*/
#import "msxml3.dll"//COM专用的 属性包括no_namespace rename("EOF",adoEOF)
//还可以引用类库 后面可以接属性
//#inport "libid:xxxxxx-xxxx-xxxx-xxxxxx" version("3.0") Icid("4")
//dll ocx tlb olb 可以是相对路径 也可以是绝对路径
#include <msxl2.h>
#include <string>
//不同版本之间切换不用改代码
#if defined(UNICODE) || defined(_UNICODE)
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif
class CXmlNodeList;//预声明 告诉编译器,该定义会提前使用
//使用形式只有两种:引用、指针
//封装
class CXmlNode
{...}
class CXmlNodeList{...}
class CXmlDocument{...}
/*
文件加载失败要注意Com初始化情况
/表示从根节点去找 :从根节点查找faceconfig /faceconfig
//表示当前节点下的任意节点 :查找所以的face节点 //face
. 表示当前节点 :当前节点下的所以face节点 .//face
.. 表示父节点 : 父节点下的所有face节点 ..//face
@表示满足属性条件 :查找id属性为1的所有节点 //face[@id="1"] 包含id属性的所有节点 //@id
取face节点的第二个 //face[2]
*/
宽字节转换:
std::string ToString(const std::wstring str){
int len = WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL);
std::string ret;
if(len <= 0)return ret;
ret.resize(len);
WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, (char*)ret.c_str(), len, NULL, NULL);
return ret;
}