目录
一、XML文件格式(INI文件)
<?xml version="1.0"?>
<Tools>
<toolsPaths>
<SavePathDoc value="C:/tools/" />
<SavePathImg value="C:/tools/" />
<SavePathVideo value="C:/tools/video/" />
</toolsPaths>
<Tools_CONFIG>
<VisualStudio>
<VS_NUMS value="0" />
<VS_version value="1.0" />
<VS_isOpen value="false" />
<vs_pros value="1" owers="7" />
</VisualStudio>
</CAN_CONFIG>
</TOOL>
(1)<?xml version="1.0" encoding="gb2312"?>“<?”代表一条指令的开始,“?>”代表一条指令的结束;“xml”代表此文件是XML文件;“ version="1.0" ”代表此文件用的是XML1.0标准;“ encoding="gb2312" ” 代表此文件所用的字符集,默认值为Unicode,如果该文件中要用到中文,就必须将此值设定为gb2312。
(2)文件体中包含的是XML文件的内容,XML元素是XML文件内容的基本单元。从语法讲,一个元素包含一个起始标记、一个结束标记以及标记之间的数据内容
XML元素与HTML元素的格式基本相同,其格式如下:<标记名称 属性名1="属性值1" 属性名1="属性值1" ……> 内容 </标记名称>
(3)注释:XML的注释与HTML的注释相同,以“<!--”开始,以“-->”结束。
(4)大小写:在HTML中是不区分大小写的,而XML区分大小写,包括标记,属性,指令等
(5)XML标记与HTML标记相同,“<”表示一个标记的开始,“>” 表示一个标记的结束。XML中只要有起始标记,就必须有结束标记,而且在使用嵌套结构时,标记之间不能交叉。在XML中不含任何内容的标记叫做空标记,格式为:<标记名称/>
(6)属性:XML属性的使用与HTML属性基本相同,但需要注意的是属性值要加双引号
(7)实体引用:实体引用是指分析文档时会被字符数据取代的元素,实体引用用于XML文档中的特殊字符,否则这些字符会被解释为元素的组成部分。例如,如果要显示“<”,需要使用实体引用“<”否则会被解释为一个标记的起始。<:< ,>:> ,":“,&apos:’ , &: &
(8)了解XMLDOM:XML DOM 是 XML Document Object Model 的缩写,即 XML 文档对象模型。
Okay,到这里学习的已经够用了,别再瞎找资料了。
二、pugixml解析INI配置文件实例
(1)首先把需要的东西下载下来吧——我在这里
(2)实例解析
#include "pugixml.hpp"
#include <iostream>
int main()
{
pugi::xml_document doc;
pugi::xml_node node;
pugi::xml_parse_result result = doc.load_file("tools.xml");
std::cout << "Load result: "<<result.description()<< ",mesh name:"<<doc.child("mesh").attribute("name").value() << std::endl;
if(result)
{
node = doc.child("Tools");
if(!node.empty())
{
pugi::xml_node node1 = node.child("toolsPaths");
std::string m_docPath = node1.child("SavePathDoc ").attribute("value").value();
m_imgPath = node1.child("SavePathImg ").attribute("value").value();
m_videoPath = RecordPathVideo = node1.child("SavePathVideo").attribute ("value").value();
node1 = node.child("Tools_CONFIG").child("VisualStudio");
int pro = node1.child("vs_pros ").attribute("value").as_int();
int pro_o = node1.child("vs_pros ").attribute("owers").as_int();
bool isOpen = node1.child("VS_isOpen ").attribute("value").as_bool();
}
}
return 0;
}
三、pugixml保存INI配置文件实例
std::string Save()
{
pugi::xml_document doc;
pugi::xml_node node, node1;
pugi::xml_parse_result result = doc.load_file("Tools.ini");
if (result)
{
node = doc.child("Tools");
if(node.empty())
return "Config file \"Tools.ini\" is invalid";
else {
pugi::xml_node node1 = node.child("toolsPaths");
node1.child("SavePathDoc").attribute("value").set_value("c/doc/");
node1 = node.child("Tools_CONFIG");
node1.child("VS_isOpen").attribute("value").set_value(1);
doc.save_file("Tools.ini");
}
}
else
return "Can't open config file \"Tools.ini\"";
return "";
}