pugixml的基础操作,增删改查、保存文件

pugixml的基本操作

汇总一下pugixml的基本操作
官网的教程示例大多是对属性的操作,而对元素(Element)的操作则较少

原文件

testRead.xml 文件的内容如下:

<?xml version="1.0" encoding='utf-8'?>
<project>
    <name>
        Test
    </name>
    <uuid>
        ABCDEFG
    </uuid>
    <editRecord>
        2022-7-19
    </editRecord>
    <forDel>
        nothing
    </forDel>
</project>

代码

经过下列代码:

#include <iostream>
#include <chrono>
#include <sstream>
#include <iomanip>

#include <QString>
#include <QDebug>
#include "pugixml.hpp"

using namespace std;

int main(int argc, char *argv[])
{
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file("testRead.xml",pugi::parse_default,pugi::encoding_utf8);
    if(!result){
        std::cout<<"Error: "<<result.description()<<std::endl;
    }

    // 查询
    const char * projectName = doc.child("project").child("name").child_value();
    cout<<projectName<<endl;

    // 增加,或追加
    // 获取当前日期
    pugi::xml_node edit = doc.child("project").child("editRecord");
    auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
    std::stringstream ss;
    ss << std::put_time(std::localtime(&t), "%Y-%m-%d");
    std::string str_time = ss.str();
    // 追加到 editRecord项
    edit.append_child(pugi::node_pcdata).set_value(str_time.c_str());


    // 修改
    doc.child("project").child("uuid").text().set("XYZWS");

    // 删除
    pugi::xml_node p = doc.child("project");
    //p.remove_child(p.child("forDel")); 具有同样的效果
    p.remove_child(p.last_child());

    // 增加属性
    p.append_attribute("modified time") = str_time.c_str();

    doc.save_file("modified.xml");
    return 0;
}

修改后的结果

结果 modified.xml:

<?xml version="1.0"?>
<project modified time="2022-07-20">
	<name>
        Test
    </name>
	<uuid>XYZWS</uuid>
	<editRecord>
        2022-7-19
    2022-07-20</editRecord>
</project>

需要注意的点

有几个需要注意的点:

  1. 原文件中xml有缩进,因此name的值包含前后的空格和换行。如下图,name的值占据了三行
    在这里插入图片描述
  2. 增加和修改不同,增加是在原来的基础上追加,正如函数名append()所表示的那样。修改则相当于清空再写入。

参考文章:
https://stackoverflow.com/questions/30789222/how-to-replace-a-nodes-pcdata-or-text-using-pugixml

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值