一.简介
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;
}