概述:
在我们的项目中用到XMl和Json格式的数据或者文件作为数据保存的格式,于是学习了XMl和Json的语法,做个小笔记总结下。
XML基本知识点
一个简单的xml实例
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
1 XML文档必须要有根元素 如下所示:
<root>
<book>
......
</book>
</root>
2 XMl声明文件的可选部分如果存在需要放在文档的第一行.如:
<?xml version="1.0" encoding="UTF-8"?>
3 所有的XML元素必须有一个关闭的标签
4 XMl对大小写敏感,必须使用相同的大小写来编写打开标签和关闭标签
如 <Title>Hello<title>错误 <Title>Hello<Title>才正确
5 XML的属性必须由引号(单引号或者双引号) 如
<file type="gif">hello.gif</file>
6 当我们使用特殊字符的时候需要使用转义字符,在XML中五个预定义的尸体引用
⁢ < less than
> > great than
& & ampresand
' ' apostrophe
" " quoutation mark
7 XMl中的注释 <!-- this is a comment -->
8 一个元素可以包含 属性 元素 文本 或者混合这三种。 如:
<note date="2017-10-09">
<to>Tove</to>
<from>Jani</from>
</note>
其中date是属性 "to" "from"是元素,"Tove", "Jani"是文本
实例:
一个用tinyxml2::XMLElement解析xml数据的C++实例,代码不全,仅仅参考
void parse_element(tinyxml2::XMLElement *xml_element_data, cmd_data_t *p_data);
/**
* @brief 解析入口函数
* @param data [in&out] 解析后的数据
* @param p_element [in] 根元素
*/
int parse_xml_data(cmd_t* data, tinyxml2::XMLElement* p_element)
{
assert(p_element != NULL);
cmd_data_t* p_data = new cmd_data_t;
tinyxml2::XMLElement* xml_element_data = p_element->firstChildElement();
while(NULL != xml_element_data)
{
//遍历提取每个OSD基本信息
parse_element(xml_element_data, p_data);
xml_element_data = xml_element_data->NextSiblingElement();
}
data->cmd_data = p_data;
return 0;
}
/**
* @brief 解析具体元素中的数据
* @note 当前元素中就一个属性和一个元素
* @param xml_element_data [in] 需要解析的元素
* @param p_data [in&out] 解析的数据
*/
void parse_element(tinyxml2::XMLElement *xml_element_data, cmd_data_t *p_data)
{
char* pConfigToken = NULL;
char* pSourceToken = NULL;
//匹配元素名称
if (strcmp(xml_element_data->Name(), "Data") != 0)
return;
//获取token属性
pSourceToken = xml_element_data->Attribute("token", NULL);
if (NULL == pSourceToken)
return;
//解析子元素CfgToken
tinyxml2::XMLElement *pCfgToken = xml_osd->FirstChildElement("CfgToken");
if (NULL == pCfgToken)
return;
pConfigToken = pCfgToken->GetText();
if (NULL == pConfigToken)
return;
strncpy(p_data->configToken[p_data->idx], pConfigToken, MAX_SIZE);
strncpy(p_data->sourceToken[p_data->idx], pSourceToken, MAX_SIZE);
p_data->idx++;
}
贴这段代码主要是了解几个函数:
1 firstChildElement() -->获取当前元素的第一个子元素
2 NextSiblingElement() -->获取下一个元素
3 Attribute() -->获取当前元素的一个属性
4 GetText() -->获取元素的文本
JSON基本知识点
JSON:Java Script Object Notation(javaScript对象表示法)
1 SON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台,json使用键值对的方式存储数据
2 json值可以为以下几种之一
数字 整数或者浮点数 如 {"age":18}
字符串 在双引号中 如 {"name":"xiaoming"}
逻辑值 true或false 如 {"flag":true}
数组 在中括号中 如 {"student":[{"name": "xiaoming"}, {"name": "xiaohong"}]}
对象 在大括号中 如 {"name":"xiaoming", "age":18}
null 如 {"student": null}
3 json文件类型是以".json"结尾的文件
暂时只写这么多,以后再补充。。。