当前位置: 首页 > 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 安装…...

【20230919】win11无法删除Chrome注册表项

win11无法删除Chrome注册表项 删除以下注册表项发生错误&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWAR\Google计算机\HKEY_CURRENT_USER\Software\Google 尝试了很多删除注册表方法&#xff08;例如&#xff1a;编辑remove.reg文件&#xff09;&#xff0c;都不行。 无法…...

TCP/IP客户端和服务器端建立通信过程

客户端和服务器端建立通信过程 使用Qt提供的类进行基于TCP的套接字通信需要用到两个类&#xff1a; QTcpServer&#xff1a;服务器类&#xff0c;用于监听客户端连接以及和客户端建立连接。 QTcpSocket&#xff1a;通信的套接字类&#xff0c;客户端、服务器端都需要使用。服务…...

Python ---使用Fake库向clickhouse造数据小案例

每次insert太麻烦了 先在clickhosue中建表 test_user表 CREATE TABLE dwh.test_user (name String,age Int32,address String,phone String,email String ) ENGINE MergeTree() ORDER BY name; 此时表中暂无数据 用Python脚本来造一些数据 from faker import Faker from c…...

09MyBatisX插件

MyBatisX插件 在真正开发过程中对于一些复杂的SQL和多表联查就需要我们自己去编写代码和SQL语句,这个时候可以使用MyBatisX插件帮助我们简化开发 安装MyBatisX插件: File -> Settings -> Plugins -> 搜索MyBatisx插件搜索安装然后重启IDEA 跳转文件功能 由于一个项…...

使用 Messenger 跨进程通信

什么是Messenger Messenger 也是IPC的方案之一&#xff0c;是基于消息的跨进程通信。基于消息是什么意思&#xff1f;Handler是我们最常用的消息机制&#xff0c;所以 Messenger 对于使用者来说就像是使用 Handler。实际上 Messenger 就是 AIDL 的上层封装而已&#xff0c;它们…...

Spring Cloud Gateway

路由谓词工厂 Route Predicate Factory 1. The After Route Predicate Factory spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver]# 用日期时间匹配 2. The Before Route Pr…...

JVM 优化技术

文章目录 JVM 优化技术概述方法内联优化说明优点内联条件 栈帧之间数据共享说明优点栈帧之间数据共享条件 JVM 优化技术 概述 JVM常见的优化技术&#xff1a; 方法内联优化。栈帧之间数据共享。 方法内联优化 说明 方法内联&#xff08;Method Inlining&#xff09;是JVM…...

【MySQL系列】- MySQL自动备份详解

【MySQL系列】- MySQL自动备份详解 文章目录 【MySQL系列】- MySQL自动备份详解一、需求背景二、Windows mysql自动备份方法2.1 复制date文件夹备份实验备份环境创建bat直接备份脚本 2 .2 mysqldump备份成sql文件创建mysqldump备份脚本 2 .3 利用WinRAR对MySQL数据库进行定时备…...

指针笔试题讲解-----让指针简单易懂(2)

目录 回顾上篇重点 &#xff1a; 一.笔试题 ( 1 ) 二.笔试题 ( 2 ) 科普进制知识点 (1) 二进制 (2) 八进制 (3)十六进制 三.笔试题&#xff08; 3 &#xff09; 四.笔试题&#xff08; 4 &#xff09; 五.笔试题&#xff08; 5 &#xff09; 六.笔试题&#xff08; …...

使用windbg分析dump文件的方法

https://zhuanlan.zhihu.com/p/613434365 一般操作如下&#xff1a; 准备工作。 打开dump文件。指定符号表文件的路径。指定可执行文件的路径。指定源码文件的路径。在windbg的命令行&#xff0c;输入并执行如下命令 .reload&#xff0c;重新加载前述数据文件。!analyze -v&a…...

喀什网站建设公司/一键生成原创文案

Processing入门简介 http://blog.csdn.net/mysunnytime/article/details/16104723 Processing官方教程 https://processing.org/tutorials/gettingstarted/ Processing程序中重写了两个函数&#xff1a;setup()和draw()。 setup()是在程序开始时调用的函数&#xff0c;只执…...

专业网站建设必要性/药品网络营销公司

粘包产生原因&#xff1a; 先说TCP&#xff1a;由于TCP协议本身的机制&#xff08;面向连接的可靠地协议-三次握手机制&#xff09;客户端与服务器会维持一个连接&#xff08;Channel&#xff09;&#xff0c;数据在连接不断开的情况下&#xff0c;可以持续不断地将多个数据包发…...

中国建设银行邀约提额网站/扬州百度推广公司

1、查找某条数据的创建时间同个月内的所有数据 SELECT * FROM 表名 WHERE DATE_FORMAT( create_time, %Y%m ) DATE_FORMAT( 2021-01-01 , %Y%m ) create_time&#xff1a;表里表示创建时间的字段名 2021-01-01 &#xff1a;选择的某条数据创建时间的年月日 2、使用select…...

房屋产权地址备案在那个网站做/企业培训公司有哪些

第一次观看我文章的朋友&#xff0c;可以关注、点赞、转发一下&#xff0c;每天分享各种干货技术和程序猿趣事 前言 职场的金三银四跳槽季又来了&#xff0c;不同的是今年比往年「冷」一些&#xff0c;形式更加严峻一些&#xff0c;大家多多少少可能都听到或看到一些信息&…...

济宁建设局官方网站/seo技术培训班

问题求解1&#xff1a; 从一个 44 的棋盘&#xff08;不可旋转&#xff09;中选取不在同一行也不在同一列上的两个方格&#xff0c;共有____72_____种方法。 假设选择第一行&#xff0c;共有4个格子可以选择&#xff0c;然后从剩余的3行中进行选择&#xff0c;有4X3种可能。…...

wordpress自然志/2021全国大学生营销大赛

Windows Phone 7上的异步编程模型其实也就是说把C#里面的异步编程模型在Windows Phone 7应用开发上使用。下面来看一下异步编程模型里面的一些关键的概念。 2个方法和一个委托和一个接口&#xff1a; (1)BeginInvoke方法用于启动异步调用 Begin 方法包含同步方法签名中的任何参…...