Go to file
Arseny Kapoulkine b2b4664030 docs: Adjust docs wrt parse_merge_pcdata x parse_embed_pcdata
parse_merge_pcdata expects to find node_pcdata nodes which aren't
present when parse_embed_pcdata is active. For now we mention this in
the documentation; changing this is possible in the future, but carries
a small performance penalty so it requires a specific use case.

Fixes #600
2024-01-26 09:23:26 -08:00
.github CI: decrease fuzzing time from 300s to 30s 2022-11-20 14:42:49 -08:00
docs docs: Adjust docs wrt parse_merge_pcdata x parse_embed_pcdata 2024-01-26 09:23:26 -08:00
scripts Update year to 2024 everywhere 2024-01-26 09:18:48 -08:00
src Update year to 2024 everywhere 2024-01-26 09:18:48 -08:00
tests tests: Add /MP to AppVeyor builds to try to reduce build time 2023-11-16 11:27:40 -08:00
.codecov.yml Update .codecov.yml 2021-06-30 13:11:45 -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
appveyor.yml Use make -j2 for mingw builds on AppVeyor 2023-11-16 12:12:56 -08:00
CMakeLists.txt Added cmake option to disable install rules 2023-10-12 02:15:05 +04:00
LICENSE.md Update year to 2024 everywhere 2024-01-26 09:18:48 -08:00
Makefile Update config=sanitize and fuzz targets 2023-10-22 10:07:52 -07:00
README.md Change badge to GHA badge. 2021-06-27 19:01:06 -07:00
readme.txt Update year to 2024 everywhere 2024-01-26 09:18:48 -08:00
SECURITY.md Create SECURITY.md 2022-02-06 09:13:33 -08:00

pugixml Actions 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).