
16 июня состоялся релиз версии 1.16 библиотеки pugixml — популярного кроссплатформенного инструмента для парсинга и обработки XML-файлов. Выход обновления ознаменовал важную веху: проекту исполняется 20 лет. Библиотека распространяется под лицензией MIT и известна высокой производительностью и гибкостью.
Pugixml предоставляет пользователям DOM-подобный интерфейс, позволяющий легко обходить узлы документа и изменять их структуру. Инструмент поддерживает стандарт XPath 1.0 и обладает встроенной поддержкой всех основных кодировок Юникода (UTF-8, UTF-16, UTF-32, UCS-2) с функцией автоматического преобразования. Библиотеку можно использовать в режиме «только заголовочные файлы», при этом она не требует наличия стандартной библиотеки C++ или поддержки исключений.
Ключевые изменения в pugixml 1.16
Изменение поведения
- При наличии в элементе одного пустого дочернего PCDATA-узла теперь используются пустые теги (если не активирован параметр format_no_empty_element_tags).
Функциональные улучшения
- Добавлена опция PUGIXML_CHARCONV_FLOAT, требующая C++17. Она позволяет преобразовывать числа с плавающей запятой независимо от локали, что положительно сказывается на производительности.
- Появились новые функции xml_node::ensure_child и xml_node::ensure_attribute, которые автоматически создают дочерний элемент или атрибут, если таковой отсутствует.
- Оптимизирована скорость поиска узлов и атрибутов по имени.
- Исключено выделение памяти при попытке загрузки документа из пустого буфера.
Развитие XPath и исправленные ошибки
- Повышена скорость выполнения XPath-запросов, включающих вычисления или сравнение значений атрибутов (например, @attr > 5), а также запросов, ориентированных на выборку узлов по имени.
- Устранено переполнение стека, возникавшее при удалении сильно вложенных поддеревьев.
- Исправлены ошибки целочисленного переполнения, способные привести к сбоям при загрузке файлов размером более 1 ГБ на 32-разрядных системах (в режиме PUGIXML_WCHAR_MODE).
- Исправлено некорректное разыменование указателя в объектах xpath_variable_set при работе с неинициализированными строковыми переменными.
Совместимость и поддержка сборки
- Расширена поддержка CMake, включая опцию PUGIXML_INSTALL_SOURCE для инсталляции pugixml.cpp.
- Добавлены пакеты NuGet и файлы проекта для Visual Studio 2026.
- Решены проблемы совместимости с модулями C++20, а также исправлены предупреждения компиляторов Clang и GCC 16.
- Устранены ошибки компиляции для старых сред, таких как Embarcadero C++ XE5, и исправлен ряд ложных срабатываний статических анализаторов.



