4.4.1 (stable) 2026-05-13

* Element::remove_attribute(): Fix the call to xmlHasNsProp()
  (gaston68cz) Issue #79

* pkg-config file: List libxml-2.0 in Requires.private instead of Requires
  (Kjell Ahlstedt) Issue #80 (Ryan Carsten Schmidt)

Documentation:
* MSVC_NMake/MSVC-Builds.md: Mention Visual Studio 2026
* Visual Studio builds: Update build information
  (Chun-wei Fan) Pull request #76
* Describe how to use libxml++ with meson
  (Kjell Ahlstedt)

Build:
* Meson and NMake builds: Distinguish Visual Studio 2026 builds
  from Visual Studio 2022 builds
* NMake Makefiles: Consolidate items and add flexibility
* NMake Makefiles: Make build process more robust
  (Chun-wei Fan) Pull request #76
* Fix build with build-deprecated-api=false
  (Kjell Ahlstedt)


4.4.0 (stable) 2025-10-28

This release and future releases will not store tarballs at
download.gnome.org/sources/. Only modules with source code at
gitlab.gnome.org/GNOME/ can store tarballs there now.
Tarballs of libxmlplusplus are now stored only at
github.com/libxmlplusplus/libxmlplusplus/releases/.

* TextReader::get_xml_lang(): Fix memory leak
* TextReader: Use xmlTextReaderSetStructuredErrorHandler()
  instead of xmlTextReaderSetErrorHandler()
  (Kjell Ahlstedt)
* TextReader: Use callback functions with C linkage.
  This callback was overlooked in 4.2.0.
  (Kjell Ahlstedt) Issue glibmm#1 (Murray Cumming)
* TextReader: Consider that the typedef xmlStructuredErrorFunc()
  changed in libxml2 2.12.0
  (Kjell Ahlstedt)
* Add methods that return std::optional<Glib::ustring>:
  TextReader: Add read_inner_xml2(), read_outer_xml2(), read_string2(),
    get_base_uri2(), get_local_name2(), get_name2(), get_namespace_uri2(),
    get_prefix2(), get_value2(), get_xml_lang2(),
    get_attribute2() (3 overloaded ones), lookup_namespace2().
  Attribute: Add get_value2()
  AttributeDeclaration: Add get_value2()
  AttributeNode: Add get_value2()
  Document: Add get_encoding2()
  Dtd: Add get_external_id2(), get_name2(), get_system_id2()
  ContentNode: Add get_content2()
  Element: Add get_attribute_value2()
  EntityDeclaration: Add get_original_text2(), get_resolved_text2()
  EntityReference: Add get_original_text2(), get_resolved_text2()
  Node: Add get_name2(), get_namespace_prefix2(), get_namespace_uri2(),
    get_path2()
  Deprecate the corresponding methods that return Glib::ustring.
  (Kjell Ahlstedt) Issue #71 (David Bears)
* TextReader: Fix naming clash with macOS macro
  (Ruoyu Zhong) Pull request #74

Documentation:
* Remove obsolete FSF (Free Software Foundation) address
  (Tom spot Callaway) Pull request #72
* README.md: Describe download locations in more detail.
  Releases will not be stored at download.gnome.org/sources/.
  (Kjell Ahlstedt)

Examples, Tests:
* Use the new methods that return std::optional<Glib::ustring>
  (Kjell Ahlstedt)

Meson build:
* Use the Python installation that Meson uses.
  See merge request glibmm!67
  (Kjell Ahlstedt)
* Build libxml2 with Meson when libxml2 is built as a subproject.
  (Andrew Potter) Issue #67, Pull request #68


4.2.0 (stable):

* Node: Add eval_xpath().
  (Kjell Ahlstedt) Issue #66 (Marie Preusse)
* Use callback functions with C linkage
  (Kjell Ahlstedt) Issue glibmm#1 (Murray Cumming)
* Parser: Ignore deprecation of xmlParserCtxt members.
  (Kjell Ahlstedt)

Documentation:
* Don't link to removed developer-old.gnome.org or removed parts
  of library.gnome.org.
  (Kjell Ahlstedt)

Meson build:
* Require python3 >= 3.7. That's what Meson requires.
* Require meson >= 0.62.
* Use Meson's pkgconfig module instead of the libxml++.pc.in template.
  (Kjell Ahlstedt)


4.0.3 (stable):

Documentation:
* Update Visual Studio build docs
  (Chun-wei Fan) Pull request #56
* Parser docs: Add a link to parser options
  (Kjell Ahlstedt)

Meson build:
* Detect if we build from a git subtree
  (William Roy) Merge request gtkmm!72
* Don't copy files with configure_file()
  (Kjell Ahlstedt)
* Fix the evaluation of is_git_build on Windows
  (Kjell Ahlstedt) Issue gtkmm#131 (William Roy)
* Backport libxml2 CMake support from libxml++-5.0
  (Chun-wei Fan) Pull request #55
* Don't fail if warning_level=everything
  (Daniel Boles, Kjell Ahlstedt) Merge request gtkmm!87
* Don't require the 'dot' command to build the documentation
  (Kjell Ahlstedt) Issue libsigcplusplus#98
* Add the build-manual option
  (Kjell Ahlstedt)
* Add bcrypt dependency when libxml2 is a subproject
  Issue #64 (Kjell Ahlstedt)
  (Andrew Potter) Pull request #65

Build:
* Make it compatible with libxml2 >= 2.12.0
  by modifying #include directives
  (Kjell Ahlstedt)


4.0.2 (stable):

* Document, Node: Recognize HTML documents
  (Kjell Ahlstedt) Issue #23 (rkd77)
* Parsers: Avoid std::getline for istream inputs
  (Andrew Potter) Pull request #28

Build:
* Meson build: When mm-common >= 1.0.4 is used, Perl is not required
  (Kjell Ahlstedt)
* Win32: Don't include afxres.h in resources
* Support Visual Studio 2022
  (Chun-wei Fan)
* Meson build: Require meson >= 0.55.0
* Meson build: Specify 'check' option in run_command()
  Will be necessary with future versions of Meson.
* Meson build: Avoid configuration warnings
* docs/manual: Sort example file lists
  See https://gitlab.gnome.org/GNOME/gtkmm-documentation/-/merge_requests/15
  by Bernhard M. Wiedemann
  (Kjell Ahlstedt)
* NMake Makefiles: Make things more configurable
  (Chun-wei Fan) Issue #44 (lxxxd)

Documentation:
* docs/manual: Upgrade from DocBook 4.1 to DocBook 5.0
  (Kjell Ahlstedt)
* MSVC_NMake/README: Document dependency placement
  (Chun-wei Fan) Issue #44 (lxxxd)


4.0.1 (stable):

Build:
* libxml++config.h.*: Don't dllimport on MinGW
  (Chun-wei Fan) Issue gtkmm#90 (Lukas K.)
* Meson build: Make it possible to use libxml++ as a subproject
  (Kjell Ahlstedt)
* Meson build: No implicit_include_directories
  (Kjell Ahlstedt)
* MSVC build: Export classes selectively
  (Chun-wei Fan)

Documentation:
* Let links point to libxml++-4.0 versions instead of latest versions
  (Kjell Ahlstedt)


4.0.0 (stable):

This is the first stable release in the libxml++-4.0 ABI series.
It is parallel-installable with the libxml++-2.6, libxml++-3.0
and libxml++-5.0 ABIs.

The tarball for 4.0.0 has been created with 'meson dist'.
If you build with Autotools from the tarball, please read
the relevant part of the README file.

Build:
* Use glibmm-2.68 instead of glibmm-2.64.
  (Kjell Ahlstedt)
* Add NMake Makefiles
  Remove Visual Studio 2010 projects
  (Chun-wei Fan) Pull request #11
* Use __declspec(dllexport) when building on Visual Studio
  Stop using gendef.exe
  (Chun-wei Fan) Pull request #14
* Add support for building with Meson
  (Kjell Ahlstedt, Chun-wei Fan) Pull request #16, #17, issue #19


3.9.1 (unstable):

* Change ABI name to libxml++-4.0
  There is also a libxml++-3-2 branch for the libxml++-3.0 ABI,
  which still uses glibmm-2.4.
* Build:
  - Use glibmm-2.64 instead of glibmm-2.4.
  - Require C++17.
* Parser: Make some methods const

3.2.0 (stable):

* Document, DomParser: Improve XInclude processing:
  Document:
    Add process_xinclude() overload that takes a fixup_base_uris parameter.
  DomParser:
    Add set/get_xinclude_options() and add optional XInclude processing to the
    parse methods.
  (Kjell Ahlstedt) Bug 781566
* Add explicit keyword to some single-parameter constructors.
  (Murray Cumming)
* tests: Don't require C++17
  (Kjell Ahlstedt)
* Build: Fix srcdir != buildir build.
  (Kjell Ahlstedt, Murray Cumming)

3.0.1 (stable):

* Element::remove_attribute(): Delete the C++ wrapper
  (Harald Schmalzl, Kjell Ahlstedt) Bug #768404.

3.0.0 (stable):

* This is the first stable release of libxml++-3.0. ABI and API are
  incompatible with libxml++-2.6. These two series of libxml++ can be
  installed in parallel.
  Applications that want to upgrade from libxml++-2.6 to libxml++-3.0
  must change their pkg-config check to libxml++-3.0.
  (Kjell Ahlstedt) Bug #754673.

* This release is identical to the unstable 2.91.3, except for the so name,
  which has now been bumped.
  (Kjell Ahlstedt) Bug #760574 (Dominique Leuenberger)

2.91.3 (unstable):

* Element: Remove a redundant nullptr check
  (Renu Tyagi) Bug #757515

* Use scoped enums (enum class) instead of unscoped enums
* Document: Test for nullptr in a constructor
* DomParser: Make operator bool() explicit
  (Kjell Ahlstedt)

* The ABI and API are not identical to libxml++ 2.91.2.
  There may be more changes in ABI and/or API before the first stable
  libxml++-3.0 release.

2.91.2 (unstable):

* Remove the preprocessor constant LIBXMLCPP_EXCEPTIONS_ENABLED.
  It was always 1.

* Add a config-time test for support of std::exception_ptr. Don't try to
  use std::exception_ptr on a system where it does not exist.
  This includes re-implementing the wrapped_exception class and the
  raise() and clone() methods in xmlpp::exception and its subclasses.
  (Daniel Trebbien, Kjell Ahlstedt) Bug #757042 (Michael Biebl)

* The ABI is not identical to that of libxml++ 2.91.1.
  There may be more changes in ABI and/or API before the first stable
  libxml++-3.0 release.

2.91.1 (unstable):

* Renamed ABI from libxml++-2.6 to libxml++-3.0.
  This requires applications to change their pkg-config check to libxml++-3.0
  when they wish to use libxml++ 2.9x or 3.x instead of libxml++ 2.x.
  (Kjell Ahlstedt) Bug #754673.
  There may be more changes in ABI and/or API before the first stable
  libxml++-3.0 release.

* Node: Add const_NodeList and use it in a const version of get_children().
  Add const_NodeSet and use it in a const version of find().
  Replace xmlpp::NodeSet by xmlpp::Node::NodeSet.
  Element: Add const_Attribute_list and use it in a const version of
  get_attributes().
  (Kjell Ahlstedt) Bug #338907 (Marcos Mayorga)
* Document: Add a non-const version of get_root_node(). Let the const version
  return a const pointer.
  (Knut Aksel Røysland) Bug #632522
* Element: Add a non-const version of get_attribute(). Let the const version
  return a const pointer.
  (Knut Aksel Røysland) Bug #632524
* Replace the deprecated std::auto_ptr by std::unique_ptr
  (Kjell Ahlstedt) Bug #753123
* DomParser: The default behaviour is to throw both parse errors and
  validity errors in an exception instead of printing some messages on stderr.
* Parser: Some protected data has become private.
* Several classes: Some virtual methods have become non-virtual, and some
  non-virtual methods have become virtual.
* Remove class xmlpp::wrapped_exception and the deprecated classes
  Schema and SchemaValidator.
* xmlpp::exception and its subclasses: Remove Raise() and Clone().
* SaxParser: Start each parsing with a new Document for entity resolution.
* Move all Node::add_child*() methods to Element and rename them to
  add_child_element*().
* Attribute: Move set_value() to AttributeNode.
* Use std::string instead of Glib::ustring for filenames.
* Node: Replace remove_child() by remove_node().
* Move some code from DtdValidator to Dtd.
* Element: Rename set/get_child_text() to set/get_first_child_text().


2.39.2 (unstable):

* SaxParser: Fix “double free or corruption” if a std::exception is thrown
  by a handler method.
  (Daniel Trebbien, Kjell Ahlstedt) Bug #753570
* Replace some (deprecated in C++11) std::auto_ptr by std::unique_ptr.
  There are still some auto_ptrs in header files bug replacing them would
  break ABI.
  (Kjell Ahlstedt) Bug #753123.

2.39.1 (unstable):

* Use (and require) C++11.
  (Murray Cumming)

2.38.1 (stable):

* Fix the build with C++11 compilers, such as MS Visual C++ 2013 - Implicit
  conversions from streams to bool are no longer allowed.)
  (Mikhail Titov) Bug #748658
* Build: Disable deprecated API in dependencies if --enable-warnings=fatal
  (Kjell Ahlstedt)
* Build: Require libxml2 2.7.7 or later
  (Kjell Ahlstedt)

2.38.0 (stable):

This stable version is identical to the unstable version 2.37.2.

API additions since 2.36:

* Add Node::add_child_with_new_ns().
  (Kjell Ahlstedt) Bug #737682 (Mathias Lorente)
* Add XsdSchema and XsdValidator classes. Deprecate Schema and SchemaValidator.
  Add RelaxNGSchema and RelaxNGValidator.
  (Kjell Ahlstedt) Bug #737712 (Michel Stam)
  Thanks to Tjalling Hattink, who made initial versions of the RelaxNG classes.
* Parser: Add input operator>>(std::istream& in, Parser& parser).
  (Kjell Ahlstedt) Bug #329281 (Pierre Thierry)
* Parser: Add [set|get]_include_default_attributes() and
  [set|get]_parser_options().
  (Kjell Ahlstedt) Bug #701674 (Bob Nolty)

2.37.2 (unstable):

* Add version information to libxml++config.h.
  (Kjell Ahlstedt)
* Document: Avoid possible null pointer dereference.
  (Gaurav) Bug #732604
* Element::set_namespace_declaration(): Update the node's associated namespace.
  Add dom_update_namespace example program.
  (Mathias Lorente) Bug #737682
* Add Node::add_child_with_new_ns().
  (Kjell Ahlstedt) Bug #737682 (Mathias Lorente)
* Schema: Don't use null pointers in get_name(), get_target_namespace()
  and get_version().
  (Kjell Ahlstedt)
* Add XsdSchema and XsdValidator. Deprecate Schema and SchemaValidator.
  Add RelaxNGSchema and RelaxNGValidator.
  (Kjell Ahlstedt) Bug #737712 (Michel Stam)
  Thanks to Tjalling Hattink, who made initial versions of the RelaxNG classes.
* Parser: Add input operator>>(std::istream& in, Parser& parser).
  (Kjell Ahlstedt) Bug #329281 (Pierre Thierry)

Documentation:
* Use doxygen-extra.css from the mm-common package.
  Requires mm-common 0.9.7 when configured to use maintainer-mode.
  (Kjell Ahlstedt)

Build:
* Avoid infinite loop with Doxygen 1.8.6.
  (Kjell Ahlstedt)

2.37.1 (unstable):

* Parser: Add [set|get]_include_default_attributes().
  (Kjell Ahlstedt) Bug #701674 (Bob Nolty)
* Improve some null-pointer checks
  (Kjell Ahlstedt) Bug #705187 (Gaurav)

Documentation:
* Manual: Add XIncludeStart and XIncludeEnd to the node type tree.
  (Kjell Ahlstedt)
* Update Doxyfile.in for doxygen 1.8.3.
  (Kjell Ahlstedt)

Build:
* Fix examples/Makefile.am for new versions of automake.
  (Kjell Ahlstedt) Bug #678390
* Examples dom_parse_entities and dom_parser: Fix when LC_ALL=C.
  (Murray Cumming) Bug #702136 (Michael Biebl)

2.36.0 (stable):

* Element::set_namespace_declaration():
  It is not an error to set the same URI twice.
  (Kjell Ahlstedt) Bug #635846, comment 27.
* Require libxml-2.0 >= 2.7.3.
  (Kjell Ahlstedt)
* Parser::initialize_context(): Call xmlCtxtUseOptions().
  (Kjell Ahlstedt)

2.35.4 (unstable):

* Document:
  - Add process_xinclude(), using new XIncludeStart
    and XIncludeEnd classes, derived from Node.
    (Kjell Ahlsted) Bug #338521.
  - Make the Document(xmlDoc*) constructor public.
    (Kjell Ahlsted) Bug #668980.
* Parser: Make it thread-safe.
  (Kjell Ahlstedt) Bug #681467.
* Schema::set_document(): If the argument 'document' is 0 then
  create an empty document, as the documentation says.
  (Kjell Ahlstedt)
* Improve the error handling.
  (Kjell Ahlstedt) Bug #635846.
* Documentation:
  - Add incremental parsing to the SaxParser example program.
  - DtdValidation and SchemaValidation: Print all exception information.
  - Improve error descriptions.
    (Kjell Ahlstedt)


2.35.3 (unstable):

* Node:
  - Add eval_to_[boolean|number|string]() methods.
  (Kjell Ahlstedt) Bug #316244
  - Fix memory problems in import_node().
  (Kjell Ahlstedt) Bug #672992
* Build:
  - The examples are now built and run during make check.
  (Kjell Ahlstedt) Bug #678390
  - Define LIBXMLCPP_EXCEPTIONS_ENABLED unconditionally.
  (Kjell Ahlstedt)

2.35.2 (unstable):

* Node: Add get_first_child().
  (Murray Cumming, Based on a patch by Ilya Murav'jov in bug #648125)
* Build: Remove the --disable-api-exceptions configure option.
  (Murray Cumming)

2.35.1 (unstable):

* Handle attributes with default values correctly.
  (Kjell Ahlstedt) Bug #669635.
* Improved handling of entity references and processing instructions.
  (Kjell Ahlstedt) Bug #669481
* Parser: Throw more detailed error messages.
  (Kjell Ahlstedt) Bug #304020 (Virgile Devaux)
* Document: Make the Document(xmlDoc*) constructor protected.
  (Murray Cumming) Bug #668980 (A. Pignotti).

2.34.2 (stable):

* Element: Add add_child_cdata(), like the existing add_child_text().
* Node::create_new_child_node(): Use the default namespace if none is specified.
  (Mathias Lorente) Bug #656110
* Documentation: Fix a markup typo.
  (Murray Cumming)
	
2.34.1 (stable):

* Do not require mm-common during the tarball build.
  (Murray Cumming)

2.34.0 (stable):

Major changes since 2.32:

* Allow separate and multi-threaded libxml2 usage by
  not using the global xmlRegisterNodeDefault() and xmlDeregisterNodeDefault()
  callbacks.
  (Alessandro Pignotti)
* Do not call xmlCleanupParser() when the library is unloaded,
  because it is brutal and can break other parts of applications that try to
  use libxml separately.
  (Murray Cumming)

2.33.2 (unstable):

* Node::remove_child(): Fix a memory management problem introduced in
  2.33.1.
  (Murray Cumming)
* Document::do_write_to_stream(), Schema::set_document(): Check the results from
	xmlSchemaNewDocParserCtxt() and xmlSaveFormatFileTo().
  (Murray Cumming) Bug #635846 (Markus Elfring)

2.33.1 (unstable):

* (Hopefully) allow separate and multi-threaded libxml2 usage by
  not using the global xmlRegisterNodeDefault() and xmlDeregisterNodeDefault()
  callbacks.
  (Alessandro Pignotti)
* Do not call xmlCleanupParser() when the library is unloaded,
  because it is brutal and can break other parts of applications that try to
  use libxml separately.
  (Murray Cumming)
* Minor code improvement.
  (Knut Aksel Røysland)
* Build: Build the examples by default.
  (Murray Cumming)

2.32.0 (stable):

* Node::find(): Check xmlNode::type for a XML_NAMESPACE_DECL to prevent a
  crash/corruption.
  (Murray Cumming) Bug #386013 (Max Kirillov)
* Build: Added an MSVC .net 2010 and 64-bit Windows builds.
  (Armin Burgmeier)

2.30.1 (stable):

* Documentation:
  - Added main page doxygen text.
  (David King, Murray Cumming)
  - Show NodeList.
  (Murray Cumming) Bug #583412 (Hubert Figuiere).
  - Correct some @newin tags.
  (Murray Cumming)

2.30.0(stable):

* Build system rewrite.
* Use mm-common for reference documentation generation. Fixes GNOME bugs
  #583411 (Hubert Figuiere), #614260 (David King) and #551501 (Johannes Schmid)
* Fix several compiler warnings.
* Use 0 instead of NULL. (Murray Cumming)

2.26.1(stable):

* Build fixes
* Build without exceptions

2.26.0(stable):

* Increased version number to match GNOME 2.26.

2.24.3 (stable):

* TextReader: Actually throw exceptions on errors.
  (This breaks ABI but we do not believe that this class could be used with
  this problem so it should not actually break any application.)
  Bug #348006.
* Build: Windows: Remove unnecessary vsnprint define.
  (Armin Burgmeier)

2.24.2 (stable):

* Fixed another two memory leaks.
  (Armin Burgmeier) Bug #563321 (Arjan Franzen)
* Removed obsolete MSVC6 project files
  (Armin Burgmeier)

2.24.1 (stable):

* Added new Schema and SchemaValidator classes to MSVC project files
  (Arjan Franzen, Arming Burgmeier) Bug #563664.
* Avoid a memory leak in Validator::check_for_exception.
  (Arjan Franzen, Murray Cumming) Bug #563321.
* Avoid a memory leak in schema class.
  (Balazs Tirpak, Murray Cumming) Bug #312216.

2.24.0 (stable):

Changes since 2.22:

* Attribute: Return the correct value even when using a namespace.
  (Murray Cumming) Bug #547689 (Sergei Fedorov)
* Added Schema and SchemaValidator classes, demonstrated in
  examples/schemavalidation.
  (Emilien KIA) Bug #312216.
* Element: Added add_child_text() with a previous_node parameter, for adding
  between existing nodes. Added add_child_text_before() too.
* Node: Added add_child() with a previous_node parameter, for adding between
  existing nodes. Added add_child_before() too.
  (Murray Cumming)
* SaxParser: added parse_chunk_raw().
  (Armin Burgmeier)


2.23.3 (unstable):

* Attribute: Return the correct value even when using a namespace.
  (Murray Cumming) Bug #547689 (Sergei Fedorov)
* Fixed MSVC++ Windows build.
  (Armin Burgmeier)

2.23.2 (unstable):

* SaxParser: added parse_chunk_raw().
  (Armin Burgmeier)
* examples: sax_parser: Catch convert errors when printing an exception to
  std:cout, though libxml++/libxml should always supply valid UTF-8.
  (Murray Cumming)

2.23.1 (unstable):

* Added Schema and SchemaValidator classes, demonstrated in
  examples/schemavalidation.
  (Emilien KIA) Bug #312216.
* Element: Added add_child_text() with a previous_node parameter, for adding
  between existing nodes. Added add_child_text_before() too.
* Node: Added add_child() with a previous_node parameter, for adding between
  existing nodes. Added add_child_before() too.
  (Murray Cumming)

2.22.0 (stable):

* Document: Fix a memory leak, by calling xmlCleanupParser
  in the destructor.
  (Deng Xiyue) Bug #501168 (Matt G.)
* Build: Fix the build with gcc 4.3 pre-releases.
  (Martin Michlmayr) Bug #510053.

2.20.0 (stable):

Changes since 2.18:
* Element: Added get_attribute_value(),
  to get a simple text value for an attribute.
  (Stef Walter) Bug #373573.
* Added an experimental --enable-api-exceptions
  configure option, to allow libxml++ to build without
  exceptions.
  (Murray Cumming)

2.19.2 (unstable):

* Added an experimental --enable-api-exceptions
  configure option, to allow libxml++ to build without
  exceptions.

2.19.1(unstable):

* Element.h: Added get_attribute_value(),
  to get a simple text value for an attribute.
  (Stef Walter) Bug #373573.

2.18.2 (stable):

* TextReader: get_name(): Fixed a memory leak.
  (Christophe de Vienne) Bug #447535.

2.18.1 (stable):

* Document::add_comment,
  Element: add_child_text(), add_child_comment():
  avoid accessing freed memory. (Murray Cumming)

2.18.0(stable):

* Slight win32 build improvement, possibly.
  (Artur Wegele)
* Slight improvement to examples.
  (Murray Cumming)

2.17.2 (unstable):

* Node: Adedd get_next_sibling() and get_previous_sibling().
  Bug #351867.
  (Nate Nielsen)

2.17.1 (unstable):

* Node: Added get_parent() Bug #351876 (Patch by Nate Nielsen)
* TextReader: Added TextReader(const char* data) constructor, for
  parsing memory buffers. Bug #351215 (Patch by Nate Nielsen)
* Element::set_attribute(): Really return the new attribute.
  Bug #361950 (Patch by Nate Nielsen)
* Build: Added MS Visual Studio 2005 project files.
  (Cedric Gustin)


2.14 (stable):

* Documentation:
  - Improved ContentNode documentation (Murray Cumming)

2.13.1 (unstable):

* First unstable 2.13.x release, to become stable 2.14.x, for GNOME 2.14.
* Node:
  - Added find() overload that takes namespaces to register during the search,
  using xmlXPathRegisterNs(). Bug #323935. (Robert Fleming)
  - set_namespace(): When creating a default namespace, avoid the
  "The namespace () has not been declared" warning, by passing 0 to
  xmlSearchNs() instead of an empty string. Bug #318186.
  (Erik Oestby).
* Build: Fix buildir!=srcdir builds. Bug #319863.(Vadim Zeitlin)
* Documentation:
  - Tutorial: Mention pkg-config.
  - Reference: Grammar fixes and a small fix for find().
  (Murray Cumming)

2.12.0 (stable):

* Added the state "Reading" to xml Reader States list.

2.11.0 (unstable):

* First unstable 2.11.x release, to become stable 2.12.x
* Fixed Document::set_entity_declaration behavior (Murray Cumming)
* Updated MSVC.Net2003 project files (Cedric Gustin)
* Fixed bugs #301727, #301712, #156352, #161825, #307481, #314419

2.10.0 (stable):

* Fixed documentation packaging problems (Murray Cumming, Christophe de Vienne)

2.9.2 (unstable):

* Added MSVC .Net 2003 support (Cedric Gustin)
* Improved documentation + Added a manual (Murray Cumming)
* Fixed a bug in utf8 handling in Document::do_write_to_string (Murray Cumming)

2.9.1 (unstable):

* First unstable 2.9.x release, to become stable 2.10.x.
* DomParser, SaxParser: Added
  parse_memory_raw(const unsigned char* contents, size_type bytes)
  for parsing non-utf8 text or text of unknown encoding.

2.8.0 (stable):

* Code Cleaning.

* Changes compared to libxml++ 2.7:
  - Added Validator and DtdValidator classes.

2.7.1 (unstable):

* Fixed bug #150082 (Christophe de Vienne)

2.7.0 (unstable):

* Added Validator and DtdValidator (Guillaume Arreckx)

2004-05-05 2.6.1 (stable):

* Fixed an issue (#141824) with Glib::ustring.
* Fixed ContentNode::SetContent behavior.

2004-04-13 2.6.0 (stable):

* Corrected constness of TextReader::get_current_node (Murray Cumming)

2004-03-02 2.5.2 (unstable):

* Fixed bug #134390: "SEGFAULT in Element::get_attribute" (John Coyle)
* Code cleaning.

2004-02-09 2.5.1 (unstable):

* Introduced Glib::ustring instead of std::string (Murray Cumming)
* Added Document::create_root_node_by_import (Kim Garrison)
* Fixed bugs #131018, #131329 and #132014.
* Added TextReader interface (Christophe de Vienne)

2003-12-18 1.0.0 (stable):

* Updated msvc files (Ephraim Vider)
* Fixed an issue in SaxParser (Murray Cumming)

2003-12-08 0.28 (unstable):

* Added entity handling to the SAX parser + examples (Dan Dennedy and Murray Cumming)
* Replaced SaxParser::AttributeMap with an ordered container (Christophe de Vienne)
* Fixed an issue with threading (Christophe de Vienne)
* Complete switched to pkg-config (Christophe de Vienne)

2003-11-05 0.27 (unstable):

* Completed documentation
* Added Element::add_comment (Dan Dennedy)
* Wrapped xmlIO output buffers and added Document::write_to_stream (Christophe de Vienne)
* Cleaned and made more consistent Element API (Murray Cumming)
* Added entities support in DomParser (Murray Cumming)

2003-09-23 0.26 (unstable):

* Added import_node example into MSVC6 project files (Ephraim Vider)
* Node::import_node now takes a const Node (suggested by Rafael Vuijk)
* Fixed threading issue due to incorrect libxml2 initialisation (Fredrik Arnerup)
* Updated Doxyfile (Christophe de Vienne)
* Added Namespaces support (Dan Dennedy, Murray Cumming)

2003-07-18 0.25 (unstable):

* Fixed MSVC6 project files (Ephraim Vider)
* Added Node::import_node (Eric Bourque)
* Removed throw specification (Christophe de Vienne).
* Removed old-style autoconf macro for libxml++ detection (Christophe de Vienne).
* Removed unused examples (Murray Cumming)

2003-06-11 0.24 (unstable):

* Added Document::write_to_file_formatted() and
  Document::write_to_string_formatted() - they add white space indenting.
  (Christophe de Vienne)
* Added ContentNode::is_white_space() to make it easier for applications to
   ignore white space such as indenting. (Murray Cumming)
* Node: Added set_name(). (Christophe de Vienne)
* Compiles with gcc's pedantic warnings as errors.
  (Christophe de Vienne)
* libxml++ header files no longer include any libxml header files.
  (Christophe de Vienne)
* Removed superfluous standalone parse_* methods in document.[h|cc]
  (Murray Cumming)
* Minor reference documentation corrections.
  (Jonathan Wakely)
* Replaced some <istream> with <iostream> to support older compilers.
  (Jonathan Wakely)
* Added classes to wrap the missing node types. (Ephraim Vider).
* Fixed a memory leak in write_to_string[_formatted] functions. (Morten Hanssen)
* Fixed compile error in keepblanks.h with MSVC 6.0. (Christophe de Vienne).
* Fixed segfault in DomParser::parse_stream on parsing failure.
  (Christophe de Vienne).

2003-05-20: 0.23 (unstable):

* Fixed incorrect use of xmlKeepBlanksDefault. Handling of white spaces
  is now conforming to xml specification. (Christophe de Vienne)
* Classes inherit from NonCopyable to avoid mistakes and clarify the
  memory mangement.
  (Murray Cumming)
* Node::find() returns empty NodeSet if it does not find the path.
  (Andy Glew)
* DomParser: Fixed memory leak. (Christophe de Vienne, Thierry Blanchard)
* Fixed NetBSD compilation (Chistophe de Vienne, Jaka Jejcic)
* Improved .spec.in file. (Eric Bourque)
* Some MSVC++ support and minor corrections. (Ephraim Vider)

0.22 (unstable):

* DOM Parser:
  - Reduced API duplication - you must now use get_document().
  (Ephraim Vider)
  - Now throws exception if document not found.
  (Christophe de Vienne)
  - Added const get_document() overload. (Murray Cumming)

0.21 (unstable):

* Parsers:
  - Validation now supported: Use Parser::set_validate() to turn on validation.
    Parsers will then throw validation_error exceptions if validation fails.
    (Murray Cumming)
  - SaxParser: Added parse_chunk() for gradual parsing of XML fragments.
    (Ole Laursen)
* Node:
  - Moved add_child_content(), get_child_content(), set_child_content(),
    and has_content() to Element class.
  - Fixed set_child_content() to add content instead of creating a node.
    (Murray Cumming)
* Added spec file for RPMs. (Eric Bourque)


2003-02-15: 0.20 (unstable):

* Node::remove_child() now works.
  (Murray Cumming)
* Added examples/dom_xpath.
  (Stefan Seefeld, Murray Cumming)

2003-02-08: 0.19 (unstable):

* The imlementation now uses libxml's API more instead of reimplementing data structures.
  (Stefan Seefeld, Murray Cumming)
* Attribute::get_value() use libxml's API properly, so it now respects the DTD.
  (Stefan Seefeld)
* Node: Added get_path() and find() for xpath lookup. (Stefan Seefeld)
* Attribute now inherits from Node, as required by the find() method. (Stefan Seefeld)
* Added Document class. (Stefan Seefeld)
* Added cobj() accessors, in case you need to use unwrapped libxml API. (Murray Cumming)
* SaxParser:
    Added CDATA section handler.
    fixed a potential buffer overflow problem
  (Valentin Rusu)

2003-01-09: 0.18 (unstable):

* big API change for nodes handling : the different types of node now herit
from a base Node class. This, among other advantages, avoids previous ambiguity
on content() acessors meaning.
* little bugfixes and improvements in SaxParser.

2002-12-10: 0.17 (unstable):

* properties are now called attributes.
* it is now possible to throw exceptions from callback
methods in SaxParser.
* parsers can parse from a stream.
* memory leak fixed in SaxParser.
* configure check for libxml2 2.4.1 at least.
* bug fixes.


2002-11-20: 0.16 (unstable):

* Examples added.
* Xml type name prefix removed.
* Tree replaced with DomParser.
* Parser renamed to SaxParser.
* Property renamed to Attribute
* Errors thrown as exceptions.
* Both parsers can parse from either file or memory.

* Simplified memory management -
  no more returning of static temporaries.
* set_*() methods return void.
