pugixml
pugixml是一个C++ XML处理库,它包含一个类似DOM的接口,具有丰富的遍历/修改功能,一个极快的XML解析器,可以从XML文件/缓冲区构建DOM树,以及一个XPath 1.0实现,用于复杂的数据驱动树查询。它还提供完整的Unicode支持,包括Unicode接口变体和不同Unicode编码之间的转换(在解析/保存过程中自动进行)。
pugixml被许多开源和专有项目使用,因其性能和易用的接口而受到青睐。
文档
当前版本的pugixml文档可在线获取,分为两个独立的文档:
建议您从快速入门指南开始;但是,许多重要的库功能在其中要么完全未描述,要么只是简单提及;如果您需要更多信息,应该阅读完整手册。
示例
以下是使用pugixml的代码示例;它打开一个XML文件,遍历所有Tool节点,并打印Timeout属性大于0的工具:
#include "pugixml.hpp"
#include <iostream>
int main()
{
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
if (!result)
return -1;
for (pugi::xml_node tool: doc.child("Profile").child("Tools").children("Tool"))
{
int timeout = tool.attribute("Timeout").as_int();
if (timeout > 0)
std::cout << "工具 " << tool.attribute("Filename").value() << " 的超时时间为 " << timeout << "\n";
}
}
使用XPath的相同示例:
#include "pugixml.hpp"
#include <iostream>
int main()
{
pugi::xml_document doc;
pugi::xml_parse_result result = doc.load_file("xgconsole.xml");
if (!result)
return -1;
pugi::xpath_node_set tools_with_timeout = doc.select_nodes("/Profile/Tools/Tool[@Timeout > 0]");
for (pugi::xpath_node node: tools_with_timeout)
{
pugi::xml_node tool = node.node();
std::cout << "工具 " << tool.attribute("Filename").value() <<
" 的超时时间为 " << tool.attribute("Timeout").as_int() << "\n";
}
}
许可证
该库根据MIT许可证条款免费向任何人提供(参见LICENSE.md)。