目录
文记录Pugixml 的使用心得,篇幅较小,主要总结其中的重点部分,以文字和图表的方式叙述。
简介
Pugixml是使用C++实现的XML解析/生成库。我个人比较推荐,理由可看官网https://pugixml.org/介绍,其中我比较看重以下几点:
- Pugixml 库仅由pugixml.cpp、pugixml.hpp和pugiconfig.hpp三个文件组成。
- Pugixml 库升级后,pugiconfig.hpp不需要覆盖(该文件仅作为配置)。
- Pugixml 库支持char和wchar_t字符编程。
- Pugixml 库解析XML数据前,可自动识别XML数据的字符集,并自动地将XML数据的字符集转换为当前字符集(UTF-8或UTF-16/32)。
- Pugixml 库解析速度快。
- Pugixml 库支持Xpath表达式遍历节点。
注意事项
- Pugixml 库解析XML数据前,注意可自动识别的字符集有限,目前仅能识别UTF-8/UTF-16/UTF32和Latin-1字符集,而其他的字符集无法自动识别(如中文、日本、韩文等字符集),必须显式指定后才可识别。
- Pugixml 库解析XML数据前,注意字符集的自动转换。即如果当前使用char接口,则输入数据最终被转换为UTF-8字符集,如果当前使用wchar_t接口,则输入数据最终被转换为UTF-16/32字符集。至于是使用char接口还是wchar_t接口,要由使用者是否在pugiconfig.hpp中启用PUGIXML_WCHAR_MODE宏来决定。
Pugixml节点类型
XML数据加载和输出
字符集识别和转换
API
重点了解XML数据加载和输出,以及字符集自动识别和转换后,API的熟悉只需多用即可,基于DOM的API其实是很简单的。甚至,也可以自定义某些功能的函数,例如:
template<typename T>
bool create_attr_node(pugi::xml_node& node, const pugi::char_t* pAttrName, const T& attrVal)
{
pugi::xml_attribute attr = node.append_attribute(pAttrName);
return (attr && attr.set_value(attrVal));
}