当前位置: 首页 > news >正文

glog与pugi::xml使用方法

(一)glog的使用:google logging的简称;
1)需要安装,网上一搜一大堆,不在赘述;
2)在cmakelists.txt中,需要链接"-glog",如:target_link_libraries(target -lpthread -lglog);
3) 测试代码如下:

#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文件的书写格式:

<?xml version = "1.0"?>   <!--注释的写法格式-->
<root><user></user><msg>哈哈哈哈</msg>
</root>

3)包含头文件

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

输出结果:

user: 云
msg: 哈哈哈哈

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

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

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

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

4)pugi::xml_parse_result的使用: parse:读作怕死!!!
xml_parse_result就是load_file()成员函数返回的结果,代码如下:

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的使用方法:

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循环某个节点的所有数据,代码如下:

#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用代码增加一个标签及其对应的元素,代码如下:

  #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文件如下:

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

相关文章:

glog与pugi::xml使用方法

&#xff08;一&#xff09;glog的使用:google logging的简称&#xff1b; &#xff11;&#xff09;需要安装&#xff0c;网上一搜一大堆&#xff0c;不在赘述&#xff1b; &#xff12;&#xff09;在cmakelists.txt中&#xff0c;需要链接"-glog"&#xff0c;如&a…...

windows下MySQL服务不见,服务无法启动,服务闪退,提示“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”

文章目录 前情提示1.解决MySQL服务消失2.解决MySQL服务无法启动 前情提示 后台启动MySQL服务出现闪退 或 “本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止”&#xff0c;可以参考以下方法。 我的电脑上安装了双版本MySQL&#xff0c;这里…...

剑指offer(C++)-JZ67:把字符串转换成整数atoi(算法-模拟)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。…...

嵌入式笔试面试刷题(day15)

文章目录 前言一、Linux中的主设备号和次设备号1.查看方法2.主设备号和次设备号的作用 二、软件IIC和硬件IIC的区别三、变量的声明和定义区别四、static在C和C中的区别五、串口总线空闲时候的电平状态总结 前言 本篇文章继续讲解嵌入式笔试面试刷题&#xff0c;希望大家坚持跟…...

【Docker】Dockerfile构建镜像

一、编写Dockerfile文件 编写镜像需要的运行环境&#xff08;Linux、java等&#xff09;&#xff0c; Dockerfile文件内容如下&#xff1a; # 使用官方的 Ubuntu 16.04 镜像作为基础镜像 FROM ubuntu:16.04# 更新包列表 RUN apt-get update# 安装所需的软件包 RUN apt-get ins…...

fota升级,可卸载apk也进行更新

首先如题目要求 可卸载apk是通过刷机或恢复出厂设置之后执行脚本安装的 然后fota升级后&#xff0c;在判断是否“是第一次刷机和恢复出厂设置”时候会返回false&#xff0c;就导致脚本没有执行。导致apk升级不成功 所以我们要完成这个就是&#xff0c;确定fota什么时候升级完…...

ASP.NET dotnet 3.5 实验室信息管理系统LIMS源码

技术架构&#xff1a;ASP.NET dotnet 3.5 LIMS作为一个信息管理系统&#xff0c;它有着和ERP、MIS之类管理软件的共性&#xff0c;如它是通过现代管理模式与计算机管理信息系统支持企业或单位合理、系统地管理经营与生产&#xff0c;最大限度地发挥现有设备、资源、人、技术的…...

2023!6招玩转 Appium 自动化测试

Appium是个什么鬼 Appium是一个移动端的自动化框架&#xff0c;可用于测试原生应用&#xff0c;移动网页应用和混合型应用&#xff0c;且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生的应用是指用android或ios的sdk编写的应用&#xff0c;移动网页应用是指网页…...

WireShark抓包分析TCP三次握手过程,TCP报文解析

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取TCP协议三次握手的数据包&am…...

【C语言】指针和数组笔试题解析

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解指针和数组笔试题解析&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1.前言2.一维数组2.字符数组2.12.22.32.42.52.6 1.前言 本篇文章是讲述在不同数…...

Vue的模板语法(下)

一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符&#xff0c; .stop&#xff0c; .prevent&#xff0c;.capture&#xff0c;.self&#xff0c;.once .stop&#xff1a;阻止事件冒泡。当一个元素触发了事件&#xff0c;并且该元素包含嵌套的父元素时&#…...

Zookeeper客户端——I0Itec-zkClient

dubbo使用了zkClient而不是使用zookeeper本身的客户端与zookeeper进行交互&#xff0c;为什么呢&#xff1f; 先看看zookeeper本身自带的客户端的问题。 1&#xff09;ZooKeeper的Watcher是一次性的&#xff0c;用过了需要再注册&#xff1b; 2&#xff09; session的超时后…...

火山引擎 ByteHouse:ClickHouse 如何保证海量数据一致性

背景 ClickHouse是一个开源的OLAP引擎&#xff0c;不仅被全球开发者广泛使用&#xff0c;在字节各个应用场景中也可以看到它的身影。基于高性能、分布式特点&#xff0c;ClickHouse可以满足大规模数据的分析和查询需求&#xff0c;因此字节研发团队以开源ClickHouse为基础&…...

hashmap使用

hashmap作为dao对象存储数据库数据 list是把每一个数据库的字段都映射了&#xff0c;而hashmap则是唯一id:数据库字段作为key hashmap遍历方式 public class Main {//使用迭代器&#xff08;Iterator&#xff09;EntrySetpublic static void main(String[] args) {// 创建并赋…...

Centos7配置国内yum源

目录 备份原系统中的repo文件配置国内开源镜像重新生成yum缓存 备份原系统中的repo文件 cd /etc/yum.repos.d/mkdir repo_bakmv *.repo repo_bak/配置国内开源镜像 到网易和阿里开源镜像站点下载系统对应版本的repo文件 curl -O http://mirrors.aliyun.com/repo/Centos-7.re…...

C#中async/await的线程ID变化情况

一、简单的起步 Console.WriteLine($"主线程开始ID&#xff1a;{Thread.CurrentThread.ManagedThreadId}");//aawait Task.Delay(100);//cConsole.WriteLine($"主线程结束ID&#xff1a;{Environment.CurrentManagedThreadId}");//b 结果&#xff1a; …...

网络安全—黑客技术—自学笔记

目录梗概 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01; 网络安全可以基于攻击和防御视角来…...

功夫再高也怕菜刀。多年经验,会独立开发的机器视觉工程师,技术太强,但是找工作能力差劲

功夫再高也怕菜刀&#xff0c;专业的事情交给专业的人去做。 今年7月份中旬的时候&#xff0c;遇到一位老朋友&#xff0c;向我咨询某公司的信息&#xff0c;其实我根本不了解这家公司的情况与实力&#xff0c;向他说了&#xff0c;抱歉&#xff0c;我查下&#xff0c;等我晚上…...

numpy的多项式函数: `poly1d`

Python numpy.poly1d() numpy.poly1d()函数有助于定义一个多项式函数。它使得在多项式上应用 "自然操作 "变得容易。 语法: numpy.poly1d (arr, root, var) 参数 : arr : [array_like] 多项式系数按照幂的递减顺序给出。如果第二个参数&#xff08;根&#xff09;被…...

Python灰帽编程——错误异常处理和面向对象

文章目录 1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测&#xff08;捕获&#xff09;异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 2. 内网主机存活检测程序2.1 scapy 模块2.1.1 主要功能2.1.2 scapy 安装…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...