pugixml使用示例及注意点

本文介绍Pugixml库,一个C++中快速且轻量级的XML处理库,对比Rapidxml,其生成XML文件的速度提高了10倍。文章详细展示了如何使用宽字符和多字节字符来生成包含中文的XML文件,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.简介

pugixml的官方主页为:http://pugixml.org/

pugixml个人觉得目前是C++处理xml里最方便,速度也最快的,在生成xml方面,300个xml文件,pugixml只用6s,对比rapidxml用时60+s,效率高了10倍,很nice;
然后它的通用优点,列举下:
它很轻量,只有三个文件(pugiconfig.hpp pugixml.cpp pugixml.hpp )
支持Unicode
支持XPATH解析
跨平台(windows/linux)

二.宽字符注意点

pugixml 使用宽字符写入xml需要将pugiconifg.hpp 的宽字符模式注释放开,如下图所示:
在这里插入图片描述

三.中文方式注意点

建议:如果你用的是char*,然后节点包含中文,使用<?xml version="1.0" encoding="gbk"?>这个声明;
当然最好的,是用wchar_t *,节点包含中文,就可以使用<?xml version="1.0" encoding="utf-8"?>声明,不用担心编码解析问题;

四.生成xml的示例
#include <iostream>
#include <sstream>

#include "pugixml.hpp"

#pragma comment(lib, "pugixml.lib")

// using namespace std;
int main(int argc, char const *argv[])
{
	int count = 10;

	// 多字节字符
	//pugi::xml_document xml_doc;
	//pugi::xml_node xml_pre_node = xml_doc.prepend_child(pugi::node_declaration);
	//xml_pre_node.append_attribute("version") = "1.0";
	//xml_pre_node.append_attribute("encoding") = "gbk";
	//pugi::xml_node root_node = xml_doc.append_child("book");
	//root_node.append_attribute("PageNumber").set_value(count);
	//pugi::xml_node name_node = root_node.append_child("name");
	//name_node.append_child(pugi::node_pcdata).set_value("小王子");
	//xml_doc.save_file("pugixml_Example.xml");
	
	// 宽字节字符
	pugi::xml_document xml_doc;
	pugi::xml_node xml_pre_node = xml_doc.prepend_child(pugi::node_declaration);
	xml_pre_node.append_attribute(L"version") = L"1.0";
	xml_pre_node.append_attribute(L"encoding") = L"utf-8";
	pugi::xml_node root_node = xml_doc.append_child(L"book");
	root_node.append_attribute(L"PageNumber").set_value(count);
	pugi::xml_node name_node = root_node.append_child(L"name");
	name_node.append_child(pugi::node_pcdata).set_value(L"小王子");
	xml_doc.save_file("pugixml_Example_wchar.xml");
	// 读取指定节点的value值  node_value 为小王子
	std::wstring node_value = name_node.first_child().value();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值