glog与pugi::xml使用方法

(一)glog的使用:google logging的简称;

1)需要安装,网上一搜一大堆,不在赘述;

2)在cmakelists.txt中,需要链接"-glog",如:target_link_libraries(target -lpthread -lglog);

  1. 测试代码如下:
cpp 复制代码
#include<iostream>
#include <glog/logging.h>  // glog头文件

using namespace std;

int main(void)
{
    FLAGS_log_dir = "/home/jiang/Desktop/test/log"; //路径必须存在,/在InitGoogleLogging()前设置
    FLAGS_logtostderr = false;  //TRUE:标准输出,FALSE:文件输出
    FLAGS_colorlogtostderr = true; //标准输出带颜色
    google::InitGoogleLogging("target"); //必须初始化
    //SetStderrLogging语句是设置打印输出等级,默认是ERROR,如果是FATAL,则只有FATAL打印;
    google::SetStderrLogging(google::INFO);
    LOG(INFO) << "姜怀伟的日志文件---------";
    LOG(WARNING)<<"warnning--------------";
    LOG(ERROR)<<"Error-------------------";
    //上面三句话会在"/home/jiang/Desktop/test/log"目录下生成3个文件及相关的软链接;
    google::ShutdownGoogleLogging(); //当要结束glog时必须关闭库,否则会内存溢出
    return 0;
}

(二)pugi::xml的使用

1)它很轻量,只有三个文件(pugiconfig.hpp pugixml.cpp pugixml.hpp ),在cmakelists.txt里面填写如下代码:

file( GLOB_RECURSE XML_SRC ${PROJECT_SOURCE_DIR}/pugixml/*.cpp)

add_executable(target main.cpp ${XML_SRC})

常用的类及定义使用方法:

pugi::xml_document doc; //定义一个xml文件类对象,准备读取文件;

pugi::xml_parse_result result; //定义一个读取xml文件的返回标志,用于是否可以正确读取文件;

pugi::xml_node node; //定义一个节点,从可以从当前节点读取;

2)xml文件的书写格式:

cpp 复制代码
<?xml version = "1.0"?>   <!--注释的写法格式-->
<root>
  <user>云</user>
  <msg>哈哈哈哈</msg>
</root>

3)包含头文件

cpp 复制代码
#include <iostream>
#include "pugiconfig.hpp"
#include "pugixml.hpp"
#include <string>
using namespace std;

int main()
{
	pugi::xml_document doc;
	doc.load_file("../config/jiang.xml");
	pugi::xml_node response = doc.child("root");
	pugi::xml_node sn = response.child("user");
	cout << "user: " << sn.child_value() << endl;
	pugi::xml_node node = response.child("msg");
	cout << "msg: " << node.child_value() << endl;    
	return 0;
}

输出结果:

cpp 复制代码
user: 云
msg: 哈哈哈哈

4)pugi::xml中,【attribute】属性的使用方法

xml文件如下:

cpp 复制代码
<?xml version = "1.0"?>   <!--注释的写法格式-->
<root>
  <bios function="suhui"> <!--属性的定义-->
  </bios>
</root>

相关的文件解析程序案例:

cpp 复制代码
    pugi::xml_document doc;
    doc.load_file("../config/jiang.xml");
    cout<<doc.child("root").child("bios").attribute("function").name()<<endl;  //function
    cout<<doc.child("root").child("bios").attribute("function").value()<<endl;  //suhui

4)pugi::xml_parse_result的使用: parse:读作怕死!!!

xml_parse_result就是load_file()成员函数返回的结果,代码如下:

cpp 复制代码
int readXML(const char* xmlName)
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file(xmlName);
    if (result.status == 0) 
    {
        cout << "加载成功 " << endl;
    }
    else
    {
        cout << " 加载xml失败 " << xmlName << endl;
        return -1;
    }
    return 0;
}

int main(void)
{
    readXML("../config/config_xiaoche.xml");
	return 0;
}

5)pugi::xml_node的使用方法:

cpp 复制代码
int main(void)
{
    pugi::xml_document doc;
    doc.load_file("../config/config_xiaoche.xml");
    cout<<doc.child("root").child("IVSIGNAL").child("traffic_sign").child_value()<<endl;  
    //定义一个节点,这样就可以直接使用节点类;
    pugi::xml_node sig = doc.child("root").child("IVSIGNAL").child("traffic_sign");
    cout<<sig.child_value()<<endl;
	return 0;
}

6)pugi::xml的for循环某个节点的所有数据,代码如下:

cpp 复制代码
#include <iostream>
#include "pugiconfig.hpp"
#include "pugixml.hpp"
#include <string>
using namespace std;
/*测试文件*/
/*
<?xml version="1.0"?>
<root>
  <IVSIGNAL>
    <steer_angle_error>0</steer_angle_error>
    <camera_angle_error>0</camera_angle_error>
    <traffic_sign>1</traffic_sign>
  </IVSIGNAL>
</root>
*/
int main(void)
{
    pugi::xml_document doc;
    doc.load_file("../config/config_xiaoche.xml");
    pugi::xml_node ivsignal = doc.child("root").child("IVSIGNAL");
    for(pugi::xml_node input = ivsignal.first_child(); input ;input = input.next_sibling())  //xml遍历某个节点下的数据;
    {
        cout<<input.child_value()<<' ';
    }
	return 0;
}
// 输出结果: 0 0 1

7)pugi::xml用代码增加一个标签及其对应的元素,代码如下:

cpp 复制代码
  #include <iostream>
#include <cstdint>
#include "pugixml.hpp"
#include <stdio.h>

pugi::xml_document xmlDoc;
pugi::xml_node nodeRoot = xmlDoc.append_child("root");
// 声明
pugi::xml_node pre = xmlDoc.append_child(pugi::node_declaration);
pre.append_attribute("version") = "1.0";
pre.append_attribute("encoding") = "utf-8";

pugi::xml_node nodeStudents = nodeRoot.append_child("students");
nodeStudents.append_child(pugi::node_pcdata).set_value("刘大哥");

nodeStudents = nodeRoot.append_child("teacher");
nodeStudents.append_child(pugi::node_pcdata).set_value("张海");
xmlDoc.save_file("test.xml");

生成的xml文件如下:

cpp 复制代码
<?xml version="1.0"?>
<root>
	<students>刘大哥</students>
	<teacher>张海</teacher>
</root>
<?xml version="1.0" encoding="utf-8"?>

8)pugi::xml用代码删除一个标签,[测试的xml数据是(7)生成的]代码如下:

int main()

{

pugi::xml_document xmlDoc;

if(xmlDoc.load_file("bbbb.xml"))

{

pugi::xml_node node = xmlDoc.child("root");

cout<<node.child_value("teacher")<<endl;

node.remove_child("teacher");

}

xmlDoc.save_file("test.xml"); //必须保存文件 ,这样teacher标签就会被删除了!

return 0;

}

相关推荐
蓑 羽1 分钟前
力扣438 找到字符串中所有字母异位词 Java版本
java·算法·leetcode
源代码:趴菜3 分钟前
LeetCode63:不同路径II
算法·leetcode·职场和发展
儿创社ErChaungClub18 分钟前
解锁编程新境界:GitHub Copilot 让效率翻倍
人工智能·算法
前端西瓜哥23 分钟前
贝塞尔曲线算法:求贝塞尔曲线和直线的交点
前端·算法
小灰灰爱代码30 分钟前
C++——求3个数中最大的数(分别考虑整数、双精度数、长整数的情况),用函数模板来实现。
开发语言·c++·算法
南加第一划水34 分钟前
Leetcode 每日一题:Evaluate Division
算法·leetcode·职场和发展
逝去的秋风1 小时前
【代码随想录训练营第42期 Day61打卡 - 图论Part11 - Floyd 算法与A * 算法
算法·图论·floyd 算法·a -star算法
zero_one_Machel1 小时前
leetcode73矩阵置零
算法·leetcode·矩阵
BeyondESH2 小时前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++
青椒大仙KI112 小时前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类