Skip to content
/ pugixml Public

Light-weight, simple and fast XML parser for C++ with XPath support

License

Notifications You must be signed in to change notification settings

zeux/pugixml

Repository files navigation

pugixmlActions StatusBuild statuscodecov.ioMIT

pugixml is a C++ XML processing library, which consists of a DOM-like interface with rich traversal/modification capabilities, an extremely fast XML parser which constructs the DOM tree from an XML file/buffer, and an XPath 1.0 implementation for complex data-driven tree queries. Full Unicode support is also available, with Unicode interface variants and conversions between different Unicode encodings (which happen automatically during parsing/saving).

pugixml is used by a lot of projects, both open-source and proprietary, for performance and easy-to-use interface.

Documentation

Documentation for the current release of pugixml is available on-line as two separate documents:

You’re advised to start with the quick-start guide; however, many important library features are either not described in it at all or only mentioned briefly; if you require more information you should read the complete manual.

Example

Here's an example of how code using pugixml looks; it opens an XML file, goes over all Tool nodes and prints tools that have a Timeout attribute greater than 0:

#include"pugixml.hpp"
#include<iostream>

intmain()
{
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"))
{
inttimeout = tool.attribute("Timeout").as_int();

if(timeout >0)
std::cout <<"Tool"<< tool.attribute("Filename").value() <<"has timeout"<< timeout <<"\n";
}
}

And the same example using XPath:

#include"pugixml.hpp"
#include<iostream>

intmain()
{
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"<< tool.attribute("Filename").value() <<
"has timeout"<< tool.attribute("Timeout").as_int() <<"\n";
}
}

License

This library is available to anybody free of charge, under the terms of MIT License (see LICENSE.md).