C++ INI配置文件——用pugixml 对XML解析(这一篇就够了)

目录

一、XML文件格式(INI文件)

二、pugixml解析INI配置文件实例


一、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文档中的特殊字符,否则这些字符会被解释为元素的组成部分。例如,如果要显示“<”,需要使用实体引用&lt;否则会被解释为一个标记的起始。&lt:< ,&gt:> ,&quot:“,&apos:’ , &amp: &

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 "";
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值