Go to file
Arseny Kapoulkine 7664bbf9af tests: Only use load_file_special_folder test on macOS
The behavior on Linux is very different between kernel versions, and it
triggers an unexpected OOM during sanitizer runs because somehow the
size is reported to be LONG_MAX. It's not clear that it helps us cover
any paths we don't cover otherwise - it would be nice to be able to test
failing to load a multi-gigabyte file on a 32-bit system, but we can't
do this easily atm anyway.
2018-11-27 08:07:31 -08:00
contrib Visual Studio Natvis visualization (#227) 2018-08-07 17:03:37 -07:00
docs Update all URLs to pugixml.org to https:// 2018-11-12 12:28:54 -08:00
scripts Update all URLs to pugixml.org to https:// 2018-11-12 12:28:54 -08:00
src Fix Wdouble-promotion warnings 2018-11-23 23:39:22 -08:00
tests tests: Only use load_file_special_folder test on macOS 2018-11-27 08:07:31 -08:00
.codecov.yml Add .codecov.yml to disable PR comments 2016-08-08 08:23:42 -07:00
.gitattributes Add .gitattributes file 2018-07-23 23:13:02 -07:00
.gitignore Update .gitignore 2017-06-20 21:11:35 -07:00
.travis.yml Enable config=sanitize in Travis CI 2018-11-27 08:07:31 -08:00
appveyor.yml Remove CoApp msi installation 2017-06-20 21:11:35 -07:00
CMakeLists.txt Minor CMakeLists.txt cleanup 2018-08-13 21:38:44 -07:00
LICENSE.md Add brief license information back to README.md 2018-04-11 08:12:34 -07:00
Makefile Enable config=sanitize in Travis CI 2018-11-27 08:07:31 -08:00
README.md Update README.md 2018-04-12 10:07:26 -07:00
readme.txt Update all URLs to pugixml.org to https:// 2018-11-12 12:28:54 -08:00

pugixml Build Status Build status codecov.io MIT

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:

Youre 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>

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

And the same example using 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 " << 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).