June 16, after almost a year and a half of development, version 1.16 was released pugixml — a fast cross-platform library for parsing and processing XML (MIT license).
The library provides a DOM-like interface with capabilities for traversing and modifying document nodes. It also supports XPath 1.0 and full Unicode support (UTF-8, UTF-16 (BE/LE), UTF-32 (BE/LE), and UCS-2), with automatic encoding conversions.
It supports usage without the standard library and C++ exceptions, and a 'header-only' mode.
This is a landmark release—this year the project turns 20! You can read more about the history and development of the library at pugixml.org, GitHub or in the first release notes.
- Behavior changes
- elements with one empty child element PCDATA are now output with empty tags (unless the format_no_empty_element_tags parameter is used).
- Improvements
- an option PUGIXML_CHARCONV_FLOAT has been added for converting floating-point numbers using ; C++17 is required for this, making conversions locale-independent and potentially improving performance;
- functions xml_node::ensure_child and xml_node::ensure_attribute have been added, returning the child element or attribute with the specified name, creating it if it was absent;
- search performance for nodes and attributes by name has been improved;
- loading a document from an empty buffer no longer causes memory allocation.
- XPath Improvements
- performance of queries that perform calculations or comparisons on attribute values, such as @attr > 5, has been improved;
- performance of queries selecting nodes and attributes by name has been improved.
- Bug Fixes
- stack overflow when removing subtrees with very deep nesting has been fixed;
- integer overflows that could lead to crashes when loading very large (> 1GB) documents on 32-bit platforms in PUGIXML_WCHAR_MODE have been fixed;
- fixed a null pointer dereference when copying xpath_variable_set objects with string variables that had unassigned values.
- CMake Support Improvements
- support for the PUGIXML_BUILD_APPLE_FRAMEWORK option has been improved;
- a CMake option PUGIXML_INSTALL_SOURCE has been added for installing pugixml.cpp (useful for working in header-only mode).
- Compatibility Improvements
- Project files and NuGet packages for Visual Studio 2026 have been added;
- Fixed compatibility issues with C++20 modules when including pugixml.hpp in the global module fragment;
- Warnings from Clang and GCC regarding -Wextra-semi-stmt, -Wsign-conversion, and -Wuninitialized (GCC 16) have been resolved;
- Compilation error with Embarcadero C++ XE5 has been fixed;
- Several false positives in static analysis have been eliminated.
Source: linux.org.ru




