<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>The XML C parser and toolkit of Gnome</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body bgcolor="#ffffff">
<h1 align="center">The XML C parser and toolkit of Gnome</h1>

<h1>Note: this is the flat content of the <a href="index.html">web
site</a></h1>

<h1 style="text-align: center">libxml, a.k.a. gnome-xml</h1>

<p></p>

<p
style="text-align: right; font-style: italic; font-size: 10pt">"Programming
with libxml2 is like the thrilling embrace of an exotic stranger." <a
href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark
Pilgrim</a></p>

<p>Libxml2 is the XML C parser and toolkit developed for the Gnome project
(but usable outside of the Gnome platform), it is free software available
under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
License</a>. XML itself is a metalanguage to design markup languages, i.e.
text language where semantic and structure are added to the content using
extra "markup" information enclosed between angle brackets. HTML is the most
well-known markup language. Though the library is written in C <a
href="python.html">a variety of language bindings</a> make it available in
other environments.</p>

<p>Libxml2 is known to be very portable, the library should build and work
without serious troubles on a variety of systems (Linux, Unix, Windows,
CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, VxWorks, ...)</p>

<p>Libxml2 implements a number of existing standards related to markup
languages:</p>
<ul>
  <li>the XML standard: <a
    href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li>
  <li>Namespaces in XML: <a
    href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a></li>
  <li>XML Base: <a
    href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a></li>
  <li><a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396</a> :
    Uniform Resource Identifiers <a
    href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a></li>
  <li>XML Path Language (XPath) 1.0: <a
    href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a></li>
  <li>HTML4 parser: <a
    href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</a></li>
  <li>XML Pointer Language (XPointer) Version 1.0: <a
    href="http://www.w3.org/TR/xptr">http://www.w3.org/TR/xptr</a></li>
  <li>XML Inclusions (XInclude) Version 1.0: <a
    href="http://www.w3.org/TR/xinclude/">http://www.w3.org/TR/xinclude/</a></li>
  <li>ISO-8859-x encodings, as well as <a
    href="http://www.cis.ohio-state.edu/rfc/rfc2044.txt">rfc2044</a> [UTF-8]
    and <a href="http://www.cis.ohio-state.edu/rfc/rfc2781.txt">rfc2781</a>
    [UTF-16] Unicode encodings, and more if using iconv support</li>
  <li>part of SGML Open Technical Resolution TR9401:1997</li>
  <li>XML Catalogs Working Draft 06 August 2001: <a
    href="http://www.oasis-open.org/committees/entity/spec-2001-08-06.html">http://www.oasis-open.org/committees/entity/spec-2001-08-06.html</a></li>
  <li>Canonical XML Version 1.0: <a
    href="http://www.w3.org/TR/xml-c14n">http://www.w3.org/TR/xml-c14n</a>
    and the Exclusive XML Canonicalization CR draft <a
    href="http://www.w3.org/TR/xml-exc-c14n">http://www.w3.org/TR/xml-exc-c14n</a></li>
  <li>Relax NG, ISO/IEC 19757-2:2003, <a
    href="http://www.oasis-open.org/committees/relax-ng/spec-20011203.html">http://www.oasis-open.org/committees/relax-ng/spec-20011203.html</a></li>
  <li>W3C XML Schemas Part 2: Datatypes <a
    href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">REC 02 May
    2001</a></li>
  <li>W3C <a href="http://www.w3.org/TR/xml-id/">xml:id</a> Working Draft 7
    April 2004</li>
</ul>

<p>In most cases libxml2 tries to implement the specifications in a
relatively strictly compliant way. As of release 2.4.16, libxml2 passed all
1800+ tests from the <a
href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
Suite</a>.</p>

<p>To some extent libxml2 provides support for the following additional
specifications but doesn't claim to implement them completely:</p>
<ul>
  <li>Document Object Model (DOM) <a
    href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a>
    the document model, but it doesn't implement the API itself, gdome2 does
    this on top of libxml2</li>
  <li><a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959</a> :
    libxml2 implements a basic FTP client code</li>
  <li><a href="http://www.cis.ohio-state.edu/rfc/rfc1945.txt">RFC 1945</a> :
    HTTP/1.0, again a basic HTTP client code</li>
  <li>SAX: a SAX2 like interface and a minimal SAX1 implementation compatible
    with early expat versions</li>
</ul>

<p>A partial implementation of <a
href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
1: Structure</a> is being worked on but it would be far too early to make any
conformance statement about it at the moment.</p>

<p>Separate documents:</p>
<ul>
  <li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an
    implementation of XSLT 1.0 and common extensions like EXSLT for
  libxml2</li>
  <li><a href="http://gdome2.cs.unibo.it/">the gdome2 page</a>
    : a standard DOM2 implementation for libxml2</li>
  <li><a href="http://www.aleksey.com/xmlsec/">the XMLSec page</a>: an
    implementation of <a href="http://www.w3.org/TR/xmldsig-core/">W3C XML
    Digital Signature</a> for libxml2</li>
  <li>also check the related links section for more related and active
    projects.</li>
</ul>
<p> Hosting sponsored by <a href="http://www.aoemedia.de/opensource-cms.html"
>Open Source CMS services</a> from AOE media.</p>

<p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p>

<h2><a name="Introducti">Introduction</a></h2>

<p>This document describes libxml, the <a
href="http://www.w3.org/XML/">XML</a> C parser and toolkit developed for the
<a href="http://www.gnome.org/">Gnome</a> project. <a
href="http://www.w3.org/XML/">XML is a standard</a> for building tag-based
structured documents/data.</p>

<p>Here are some key points about libxml:</p>
<ul>
  <li>Libxml2 exports Push (progressive) and Pull (blocking) type parser
    interfaces for both XML and HTML.</li>
  <li>Libxml2 can do DTD validation at parse time, using a parsed document
    instance, or with an arbitrary DTD.</li>
  <li>Libxml2 includes complete <a
    href="http://www.w3.org/TR/xpath">XPath</a>, <a
    href="http://www.w3.org/TR/xptr">XPointer</a> and <a
    href="http://www.w3.org/TR/xinclude">XInclude</a> implementations.</li>
  <li>It is written in plain C, making as few assumptions as possible, and
    sticking closely to ANSI C/POSIX for easy embedding. Works on
    Linux/Unix/Windows, ported to a number of other platforms.</li>
  <li>Basic support for HTTP and FTP client allowing applications to fetch
    remote resources.</li>
  <li>The design is modular, most of the extensions can be compiled out.</li>
  <li>The internal document representation is as close as possible to the <a
    href="http://www.w3.org/DOM/">DOM</a> interfaces.</li>
  <li>Libxml2 also has a <a
    href="http://www.megginson.com/SAX/index.html">SAX like interface</a>;
    the interface is designed to be compatible with <a
    href="http://www.jclark.com/xml/expat.html">Expat</a>.</li>
  <li>This library is released under the <a
    href="http://www.opensource.org/licenses/mit-license.html">MIT
    License</a>. See the Copyright file in the distribution for the precise
    wording.</li>
</ul>

<p>Warning: unless you are forced to because your application links with a
Gnome-1.X library requiring it,  <strong><span
style="background-color: #FF0000">Do Not Use libxml1</span></strong>, use
libxml2</p>

<h2><a name="FAQ">FAQ</a></h2>

<p>Table of Contents:</p>
<ul>
  <li><a href="FAQ.html#License">License(s)</a></li>
  <li><a href="FAQ.html#Installati">Installation</a></li>
  <li><a href="FAQ.html#Compilatio">Compilation</a></li>
  <li><a href="FAQ.html#Developer">Developer corner</a></li>
</ul>

<h3><a name="License">License</a>(s)</h3>
<ol>
  <li><em>Licensing Terms for libxml</em>
    <p>libxml2 is released under the <a
    href="http://www.opensource.org/licenses/mit-license.html">MIT
    License</a>; see the file Copyright in the distribution for the precise
    wording</p>
  </li>
  <li><em>Can I embed libxml2 in a proprietary application ?</em>
    <p>Yes. The MIT License allows you to keep proprietary the changes you
    made to libxml, but it would be graceful to send-back bug fixes and
    improvements as patches for possible incorporation in the main
    development tree.</p>
  </li>
</ol>

<h3><a name="Installati">Installation</a></h3>
<ol>
  <li><strong><span style="background-color: #FF0000">Do Not Use
    libxml1</span></strong>, use libxml2</li>
  <p></p>
  <li><em>Where can I get libxml</em> ?
    <p>The original distribution comes from <a
    href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a> or <a
    href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">gnome.org</a></p>
    <p>Most Linux and BSD distributions include libxml, this is probably the
    safer way for end-users to use libxml.</p>
    <p>David Doolin provides precompiled Windows versions at <a
    href="http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/         ">http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/</a></p>
  </li>
  <p></p>
  <li><em>I see libxml and libxml2 releases, which one should I install ?</em>
    <ul>
      <li>If you are not constrained by backward compatibility issues with
        existing applications, install libxml2 only</li>
      <li>If you are not doing development, you can safely install both.
        Usually the packages <a
        href="http://rpmfind.net/linux/RPM/libxml.html">libxml</a> and <a
        href="http://rpmfind.net/linux/RPM/libxml2.html">libxml2</a> are
        compatible (this is not the case for development packages).</li>
      <li>If you are a developer and your system provides separate packaging
        for shared libraries and the development components, it is possible
        to install libxml and libxml2, and also <a
        href="http://rpmfind.net/linux/RPM/libxml-devel.html">libxml-devel</a>
        and <a
        href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml2-devel</a>
        too for libxml2 &gt;= 2.3.0</li>
      <li>If you are developing a new application, please develop against
        libxml2(-devel)</li>
    </ul>
  </li>
  <li><em>I can't install the libxml package, it conflicts with libxml0</em>
    <p>You probably have an old libxml0 package used to provide the shared
    library for libxml.so.0, you can probably safely remove it. The libxml
    packages provided on <a
    href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a> provide
    libxml.so.0</p>
  </li>
  <li><em>I can't install the libxml(2) RPM package due to failed
    dependencies</em>
    <p>The most generic solution is to re-fetch the latest src.rpm , and
    rebuild it locally with</p>
    <p><code>rpm --rebuild libxml(2)-xxx.src.rpm</code>.</p>
    <p>If everything goes well it will generate two binary rpm packages (one
    providing the shared libs and xmllint, and the other one, the -devel
    package, providing includes, static libraries and scripts needed to build
    applications with libxml(2)) that you can install locally.</p>
  </li>
</ol>

<h3><a name="Compilatio">Compilation</a></h3>
<ol>
  <li><em>What is the process to compile libxml2 ?</em>
    <p>As most UNIX libraries libxml2 follows the "standard":</p>
    <p><code>gunzip -c xxx.tar.gz | tar xvf -</code></p>
    <p><code>cd libxml-xxxx</code></p>
    <p><code>./configure --help</code></p>
    <p>to see the options, then the compilation/installation proper</p>
    <p><code>./configure [possible options]</code></p>
    <p><code>make</code></p>
    <p><code>make install</code></p>
    <p>At that point you may have to rerun ldconfig or a similar utility to
    update your list of installed shared libs.</p>
  </li>
  <li><em>What other libraries are needed to compile/install libxml2 ?</em>
    <p>Libxml2 does not require any other library, the normal C ANSI API
    should be sufficient (please report any violation to this rule you may
    find).</p>
    <p>However if found at configuration time libxml2 will detect and use the
    following libs:</p>
    <ul>
      <li><a href="http://www.info-zip.org/pub/infozip/zlib/">libz</a> : a
        highly portable and available widely compression library.</li>
      <li>iconv: a powerful character encoding conversion library. It is
        included by default in recent glibc libraries, so it doesn't need to
        be installed specifically on Linux. It now seems a <a
        href="http://www.opennc.org/onlinepubs/7908799/xsh/iconv.html">part
        of the official UNIX</a> specification. Here is one <a
        href="http://www.gnu.org/software/libiconv/">implementation of the
        library</a> which source can be found <a
        href="ftp://ftp.ilog.fr/pub/Users/haible/gnu/">here</a>.</li>
    </ul>
  </li>
  <p></p>
  <li><em>Make check fails on some platforms</em>
    <p>Sometimes the regression tests' results don't completely match the
    value produced by the parser, and the makefile uses diff to print the
    delta. On some platforms the diff return breaks the compilation process;
    if the diff is small this is probably not a serious problem.</p>
    <p>Sometimes (especially on Solaris) make checks fail due to limitations
    in make. Try using GNU-make instead.</p>
  </li>
  <li><em>I use the SVN version and there is no configure script</em>
    <p>The configure script (and other Makefiles) are generated. Use the
    autogen.sh script to regenerate the configure script and Makefiles,
    like:</p>
    <p><code>./autogen.sh --prefix=/usr --disable-shared</code></p>
  </li>
  <li><em>I have troubles when running make tests with gcc-3.0</em>
    <p>It seems the initial release of gcc-3.0 has a problem with the
    optimizer which miscompiles the URI module. Please use another
    compiler.</p>
  </li>
</ol>

<h3><a name="Developer">Developer</a> corner</h3>
<ol>
  <li><em>Troubles compiling or linking programs using libxml2</em>
    <p>Usually the problem comes from the fact that the compiler doesn't get
    the right compilation or linking flags. There is a small shell script
    <code>xml2-config</code> which is installed as part of libxml2 usual
    install process which provides those flags. Use</p>
    <p><code>xml2-config --cflags</code></p>
    <p>to get the compilation flags and</p>
    <p><code>xml2-config --libs</code></p>
    <p>to get the linker flags. Usually this is done directly from the
    Makefile as:</p>
    <p><code>CFLAGS=`xml2-config --cflags`</code></p>
    <p><code>LIBS=`xml2-config --libs`</code></p>
  </li>
  <li><em>I want to install my own copy of libxml2 in my home directory and
    link my programs against it, but it doesn't work</em>
    <p>There are many different ways to accomplish this.  Here is one way to
    do this under Linux.  Suppose your home directory is <code>/home/user.
    </code>Then:</p>
    <ul>
      <li>Create a subdirectory, let's call it <code>myxml</code></li>
      <li>unpack the libxml2 distribution into that subdirectory</li>
      <li>chdir into the unpacked distribution
        (<code>/home/user/myxml/libxml2 </code>)</li>
      <li>configure the library using the "<code>--prefix</code>" switch,
        specifying an installation subdirectory in
        <code>/home/user/myxml</code>, e.g.
        <p><code>./configure --prefix /home/user/myxml/xmlinst</code> {other
        configuration options}</p>
      </li>
      <li>now run <code>make</code> followed by <code>make install</code></li>
      <li>At this point, the installation subdirectory contains the complete
        "private" include files, library files and binary program files (e.g.
        xmllint), located in
        <p><code>/home/user/myxml/xmlinst/lib,
        /home/user/myxml/xmlinst/include </code> and <code>
        /home/user/myxml/xmlinst/bin</code></p>
        respectively.</li>
      <li>In order to use this "private" library, you should first add it to
        the beginning of your default PATH (so that your own private program
        files such as xmllint will be used instead of the normal system
        ones).  To do this, the Bash command would be
        <p><code>export PATH=/home/user/myxml/xmlinst/bin:$PATH</code></p>
      </li>
      <li>Now suppose you have a program <code>test1.c</code> that you would
        like to compile with your "private" library.  Simply compile it using
        the command
        <p><code>gcc `xml2-config --cflags --libs` -o test test.c</code></p>
        Note that, because your PATH has been set with <code>
        /home/user/myxml/xmlinst/bin</code> at the beginning, the xml2-config
        program which you just installed will be used instead of the system
        default one, and this will <em>automatically</em> get the correct
        libraries linked with your program.</li>
    </ul>
  </li>

  <p></p>
  <li><em>xmlDocDump() generates output on one line.</em>
    <p>Libxml2 will not <strong>invent</strong> spaces in the content of a
    document since <strong>all spaces in the content of a document are
    significant</strong>. If you build a tree from the API and want
    indentation:</p>
    <ol>
      <li>the correct way is to generate those yourself too.</li>
      <li>the dangerous way is to ask libxml2 to add those blanks to your
        content <strong>modifying the content of your document in the
        process</strong>. The result may not be what you expect. There is
        <strong>NO</strong> way to guarantee that such a modification won't
        affect other parts of the content of your document. See <a
        href="http://xmlsoft.org/html/libxml-parser.html#xmlKeepBlanksDefault">xmlKeepBlanksDefault
        ()</a> and <a
        href="http://xmlsoft.org/html/libxml-tree.html#xmlSaveFormatFile">xmlSaveFormatFile
        ()</a></li>
    </ol>
  </li>
  <p></p>
  <li><em>Extra nodes in the document:</em>
    <p><em>For an XML file as below:</em></p>
    <pre>&lt;?xml version="1.0"?&gt;
&lt;PLAN xmlns="http://www.argus.ca/autotest/1.0/"&gt;
&lt;NODE CommFlag="0"/&gt;
&lt;NODE CommFlag="1"/&gt;
&lt;/PLAN&gt;</pre>
    <p><em>after parsing it with the function
    pxmlDoc=xmlParseFile(...);</em></p>
    <p><em>I want to the get the content of the first node (node with the
    CommFlag="0")</em></p>
    <p><em>so I did it as following;</em></p>
    <pre>xmlNodePtr pnode;
pnode=pxmlDoc-&gt;children-&gt;children;</pre>
    <p><em>but it does not work. If I change it to</em></p>
    <pre>pnode=pxmlDoc-&gt;children-&gt;children-&gt;next;</pre>
    <p><em>then it works.  Can someone explain it to me.</em></p>
    <p></p>
    <p>In XML all characters in the content of the document are significant
    <strong>including blanks and formatting line breaks</strong>.</p>
    <p>The extra nodes you are wondering about are just that, text nodes with
    the formatting spaces which are part of the document but that people tend
    to forget. There is a function <a
    href="http://xmlsoft.org/html/libxml-parser.html">xmlKeepBlanksDefault
    ()</a>  to remove those at parse time, but that's an heuristic, and its
    use should be limited to cases where you are certain there is no
    mixed-content in the document.</p>
  </li>
  <li><em>I get compilation errors of existing code like when accessing
    <strong>root</strong> or <strong>child fields</strong> of nodes.</em>
    <p>You are compiling code developed for libxml version 1 and using a
    libxml2 development environment. Either switch back to libxml v1 devel or
    even better fix the code to compile with libxml2 (or both) by <a
    href="upgrade.html">following the instructions</a>.</p>
  </li>
  <li><em>I get compilation errors about non existing
    <strong>xmlRootNode</strong> or <strong>xmlChildrenNode</strong>
    fields.</em>
    <p>The source code you are using has been <a
    href="upgrade.html">upgraded</a> to be able to compile with both libxml
    and libxml2, but you need to install a more recent version:
    libxml(-devel) &gt;= 1.8.8 or libxml2(-devel) &gt;= 2.1.0</p>
  </li>
  <li><em>Random crashes in threaded applications</em>
    <p>Read and follow all advices on the <a href="threads.html">thread
    safety</a> page, and make 100% sure you never call xmlCleanupParser()
    while the library or an XML document might still be in use by another
    thread.</p>
  </li>
  <li><em>The example provided in the web page does not compile.</em>
    <p>It's hard to maintain the documentation in sync with the code
    &lt;grin/&gt; ...</p>
    <p>Check the previous points 1/ and 2/ raised before, and please send
    patches.</p>
  </li>
  <li><em>Where can I get more examples and information than provided on the
    web page?</em>
    <p>Ideally a libxml2 book would be nice. I have no such plan ... But you
    can:</p>
    <ul>
      <li>check more deeply the <a href="html/libxml-lib.html">existing
        generated doc</a></li>
      <li>have a look at <a href="examples/index.html">the set of
        examples</a>.</li>
      <li>look for examples of use for libxml2 function using the Gnome code
          or by asking on Google.</li>
      <li><a
        href="http://svn.gnome.org/viewvc/libxml2/trunk/">Browse
        the libxml2 source</a> , I try to write code as clean and documented
        as possible, so looking at it may be helpful. In particular the code
        of <a href="http://svn.gnome.org/viewvc/libxml2/trunk/xmllint.c?view=markup">xmllint.c</a> and of the various testXXX.c test programs should
        provide good examples of how to do things with the library.</li>
    </ul>
  </li>
  <p></p>
  <li><em>What about C++ ?</em>
    <p>libxml2 is written in pure C in order to allow easy reuse on a number
    of platforms, including embedded systems. I don't intend to convert to
    C++.</p>
    <p>There is however a C++ wrapper which may fulfill your needs:</p>
    <ul>
      <li>by Ari Johnson &lt;ari@btigate.com&gt;:
        <p>Website: <a
        href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p>
        <p>Download: <a
        href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p>
      </li>
    </ul>
  </li>
  <li><em>How to validate a document a posteriori ?</em>
    <p>It is possible to validate documents which had not been validated at
    initial parsing time or documents which have been built from scratch
    using the API. Use the <a
    href="http://xmlsoft.org/html/libxml-valid.html#xmlValidateDtd">xmlValidateDtd()</a>
    function. It is also possible to simply add a DTD to an existing
    document:</p>
    <pre>xmlDocPtr doc; /* your existing document */
xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */

        dtd-&gt;name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */

        doc-&gt;intSubset = dtd;
        if (doc-&gt;children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
        else xmlAddPrevSibling(doc-&gt;children, (xmlNodePtr)dtd);
          </pre>
  </li>
  <li><em>So what is this funky "xmlChar" used all the time?</em>
    <p>It is a null terminated sequence of utf-8 characters. And only utf-8!
    You need to convert strings encoded in different ways to utf-8 before
    passing them to the API.  This can be accomplished with the iconv library
    for instance.</p>
  </li>
  <li>etc ...</li>
</ol>

<p></p>

<h2><a name="Documentat">Developer Menu</a></h2>

<p>There are several on-line resources related to using libxml:</p>
<ol>
  <li>Use the <a href="search.php">search engine</a> to look up
  information.</li>
  <li>Check the <a href="FAQ.html">FAQ.</a></li>
  <li>Check the <a href="http://xmlsoft.org/html/libxml-lib.html">extensive
    documentation</a> automatically extracted from code comments.</li>
  <li>Look at the documentation about <a href="encoding.html">libxml
    internationalization support</a>.</li>
  <li>This page provides a global overview and <a href="example.html">some
    examples</a> on how to use libxml.</li>
  <li><a href="examples/index.html">Code examples</a></li>
  <li>John Fleck's libxml2 tutorial: <a href="tutorial/index.html">html</a>
    or <a href="tutorial/xmltutorial.pdf">pdf</a>.</li>
  <li>If you need to parse large files, check the <a
    href="xmlreader.html">xmlReader</a> API tutorial</li>
  <li><a href="mailto:james@daa.com.au">James Henstridge</a> wrote <a
    href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">some nice
    documentation</a> explaining how to use the libxml SAX interface.</li>
  <li>George Lebl wrote <a
    href="http://www-106.ibm.com/developerworks/library/l-gnome3/">an article
    for IBM developerWorks</a> about using libxml.</li>
  <li>Check <a href="http://svn.gnome.org/viewvc/libxml2/trunk/TODO?view=markup">the TODO
    file</a>.</li>
  <li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a>
    description. If you are starting a new project using libxml you should
    really use the 2.x version.</li>
  <li>And don't forget to look at the <a
    href="http://mail.gnome.org/archives/xml/">mailing-list archive</a>.</li>
</ol>

<h2><a name="Reporting">Reporting bugs and getting help</a></h2>

<p>Well, bugs or missing features are always possible, and I will make a
point of fixing them in a timely fashion. The best way to report a bug is to
use the <a href="https://gitlab.gnome.org/GNOME/libxml2/issues">Gnome
bug tracking database</a> (make sure to use the "libxml2" module name). I
look at reports there regularly and it's good to have a reminder when a bug
is still open. Be sure to specify that the bug is for the package libxml2.</p>

<p>For small problems you can try to get help on IRC, the #xml channel on
irc.gnome.org (port 6667) usually has a few people subscribed which may help
(but there is no guarantee and if a real issue is raised it should go on the
mailing-list for archival).</p>

<p>There is also a mailing-list <a
href="mailto:xml@gnome.org">xml@gnome.org</a> for libxml, with an  <a
href="http://mail.gnome.org/archives/xml/">on-line archive</a> (<a
href="http://xmlsoft.org/messages">old</a>). To subscribe to this list,
please visit the <a
href="http://mail.gnome.org/mailman/listinfo/xml">associated Web</a> page and
follow the instructions. <strong>Do not send code, I won't debug it</strong>
(but patches are really appreciated!).</p>

<p>Please note that with the current amount of virus and SPAM, sending mail
to the list without being subscribed won't work. There is *far too many
bounces* (in the order of a thousand a day !) I cannot approve them manually
anymore. If your mail to the list bounced waiting for administrator approval,
it is LOST ! Repost it and fix the problem triggering the error. Also please
note that <span style="color: #FF0000; background-color: #FFFFFF">emails with
a legal warning asking to not copy or redistribute freely the information
they contain</span> are <strong>NOT</strong> acceptable for the mailing-list,
such mail will as much as possible be discarded automatically, and are less
likely to be answered if they made it to the list, <strong>DO NOT</strong>
post to the list from an email address where such legal requirements are
automatically added, get private paying support if you can't share
information.</p>

<p>Check the following <strong><span style="color: #FF0000">before
posting</span></strong>:</p>
<ul>
  <li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the
    search engine</a> to get information related to your problem.</li>
  <li>Make sure you are <a href="ftp://xmlsoft.org/libxml2/">using a recent
    version</a>, and that the problem still shows up in a recent version.</li>
  <li>Check the <a href="http://mail.gnome.org/archives/xml/">list
    archives</a> to see if the problem was reported already. In this case
    there is probably a fix available, similarly check the <a
    href="https://gitlab.gnome.org/GNOME/libxml2/issues">registered
    open bugs</a>.</li>
  <li>Make sure you can reproduce the bug with xmllint or one of the test
    programs found in source in the distribution.</li>
  <li>Please send the command showing the error as well as the input (as an
    attachment)</li>
</ul>

<p>Then send the bug with associated information to reproduce it to the <a
href="mailto:xml@gnome.org">xml@gnome.org</a> list; if it's really libxml
related I will approve it. Please do not send mail to me directly, it makes
things really hard to track and in some cases I am not the best person to
answer a given question, ask on the list.</p>

<p>To <span style="color: #E50000">be really clear about support</span>:</p>
<ul>
  <li>Support or help <span style="color: #E50000">requests MUST be sent to
    the list or the bug tracker</span> in case of problems, so that the Question
    and Answers can be shared publicly. Failing to do so carries the implicit
    message "I want free support but I don't want to share the benefits with
    others" and is not welcome. I will automatically Carbon-Copy the
    xml@gnome.org mailing list for any technical reply made about libxml2 or
    libxslt.</li>
  <li>There is <span style="color: #E50000">no guarantee of support</span>. If
    your question remains unanswered after a week, repost it, making sure you
    gave all the detail needed and the information requested.</li>
  <li>Failing to provide information as requested or double checking first
    for prior feedback also carries the implicit message "the time of the
    library maintainers is less valuable than my time" and might not be
    welcome.</li>
</ul>

<p>Of course, bugs reported with a suggested patch for fixing them will
probably be processed faster than those without.</p>

<p>If you're looking for help, a quick look at <a
href="http://mail.gnome.org/archives/xml/">the list archive</a> may actually
provide the answer. I usually send source samples when answering libxml2
usage questions. The <a
href="http://xmlsoft.org/html/book1.html">auto-generated documentation</a> is
not as polished as I would like (i need to learn more about DocBook), but
it's a good starting point.</p>

<h2><a name="help">How to help</a></h2>

<p>You can help the project in various ways, the best thing to do first is to
subscribe to the mailing-list as explained before, check the <a
href="http://mail.gnome.org/archives/xml/">archives </a>and the <a
href="https://gitlab.gnome.org/GNOME/libxml2/issues">Gnome bug
database</a>:</p>
<ol>
  <li>Provide patches when you find problems.</li>
  <li>Provide the diffs when you port libxml2 to a new platform. They may not
    be integrated in all cases but help pinpointing portability problems
  and</li>
  <li>Provide documentation fixes (either as patches to the code comments or
    as HTML diffs).</li>
  <li>Provide new documentations pieces (translations, examples, etc
  ...).</li>
  <li>Check the TODO file and try to close one of the items.</li>
  <li>Take one of the points raised in the archive or the bug database and
    provide a fix. <a href="mailto:daniel@veillard.com">Get in touch with me
    </a>before to avoid synchronization problems and check that the suggested
    fix will fit in nicely :-)</li>
</ol>

<h2><a name="Downloads">Downloads</a></h2>

<p>The latest versions of libxml2 can be found on the <a
href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a> server ( <a
href="ftp://xmlsoft.org/libxml2/">FTP</a> and rsync are available), there are also
mirrors (<a href="ftp://fr.rpmfind.net/pub/libxml/">France</a> and
Antonin Sprinzl also provide <a href="ftp://gd.tuwien.ac.at/pub/libxml/">a
mirror in Austria</a>). (NOTE that you need both the <a
href="http://rpmfind.net/linux/RPM/libxml2.html">libxml(2)</a> and <a
href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml(2)-devel</a>
packages installed to compile applications using libxml if using RPMs.)</p>

<p>You can find all the history of libxml(2) and libxslt releases in the <a
href="http://xmlsoft.org/sources/old/">old</a> directory. The precompiled
Windows binaries made by Igor Zlatovic are available in the <a
href="http://xmlsoft.org/sources/win32/">win32</a> directory.</p>

<p>Binary ports:</p>
<ul>
  <li>RPMs for x86_64 are available directly on <a
    href="ftp://xmlsoft.org/libxml2/">xmlsoft.org</a>, the source RPM will compile on
    any architecture supported.</li>
  <li><a href="mailto:igor@zlatkovic.com">Igor Zlatkovic</a> is now the
    maintainer of the Windows port, <a
    href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
    binaries</a>.</li>
  <li>OpenCSW provides <a
    href="http://opencsw.org/packages/libxml2">Solaris
  binaries</a>.</li>
  <li><a href="mailto:Steve.Ball@explain.com.au">Steve Ball</a> provides <a
    href="http://www.explain.com.au/oss/libxml2xslt.html">Mac Os X
    binaries</a>.</li>
  <li>The HP-UX porting center provides <a
    href="http://hpux.connect.org.uk/hppd/hpux/Gnome/">HP-UX binaries</a></li>
  <li>Bull provides precompiled <a
    href="http://gnome.bullfreeware.com/new_index.html">RPMs for AIX</a> as
    patr of their GNOME packages</li>
</ul>

<p>If you know other supported binary ports, please <a
href="http://veillard.com/">contact me</a>.</p>

<p><a name="Snapshot">Snapshot:</a></p>
<ul>
  <li>Code from the GNOME GIT base libxml2 module, updated hourly <a
    href="ftp://xmlsoft.org/libxml2/libxml2-git-snapshot.tar.gz">libxml2-git-snapshot.tar.gz</a>.</li>
  <li>Docs, content of the web site, the list archive included <a
    href="ftp://xmlsoft.org/libxml2/libxml-docs.tar.gz">libxml-docs.tar.gz</a>.</li>
</ul>

<p><a name="Contribs">Contributions:</a></p>

<p>I do accept external contributions, especially if compiling on another
platform,  get in touch with the list to upload the package, wrappers for
various languages have been provided, and can be found in the <a
href="python.html">bindings section</a></p>

<p>Libxml2 is also available from GIT:</p>
<ul>
  <li><p>See <a href="https://gitlab.gnome.org/GNOME/libxml2">libxml2 Git web</a>.
         To checkout a local tree use:</p>
       <pre>git clone https://gitlab.gnome.org/GNOME/libxml2.git</pre>
  </li>
  <li>The <strong>libxslt</strong> module is also present 
      <a href="https://gitlab.gnome.org/GNOME/libxslt">there</a>.</li>
</ul>

<h2><a name="News">Releases</a></h2>

<p>The <a href="ChangeLog.html">change log</a> describes the recents commits
to the <a href="https://gitlab.gnome.org/GNOME/libxml2">GIT</a> code base.</p>

<p>Here is the list of public releases:</p>

<h3>v2.9.11: May 13 2021</h3>
<ul>
  <li>Security:<br/>
  Patch for security issue CVE-2021-3541 (Daniel Veillard)<br/>
  </li>

  <li>Documentation:<br/>
  Clarify xmlNewDocProp documentation (Nick Wellnhofer)<br/>
  </li>

  <li>Portability:<br/>
  CMake: Only add postfixes if MSVC (Christopher Degawa),<br/>
  Fix XPath NaN/Inf for older GCC versions (Nick Wellnhofer),<br/>
  Use CMake PROJECT_VERSION (Markus Rickert),<br/>
  Fix warnings in libxml.m4 with autoconf 2.70+. (Simon Josefsson),<br/>
  Add CI for CMake on MSVC (Markus Rickert),<br/>
  Update minimum required CMake version (Markus Rickert),<br/>
  Add variables for configured options to CMake config files (Markus Rickert),<br/>
  Check if variables exist when defining targets (Markus Rickert),<br/>
  Check if target exists when reading target properties (Markus Rickert),<br/>
  Add xmlcatalog target and definition to config files (Markus Rickert),<br/>
  Remove include directories for link-only dependencies (Markus Rickert),<br/>
  Fix ICU build in CMake (Markus Rickert),<br/>
  Configure pkgconfig, xml2-config, and xml2Conf.sh file (Markus Rickert),<br/>
  Update CMake config files (Markus Rickert),<br/>
  Add xmlcatalog and xmllint to CMake export (Markus Rickert),<br/>
  Simplify xmlexports.h (Nick Wellnhofer),<br/>
  Require dependencies based on enabled CMake options (Markus Rickert),<br/>
  Use NAMELINK_COMPONENT in CMake install (Markus Rickert),<br/>
  Add CMake files to EXTRA_DIST (Markus Rickert),<br/>
  Add missing compile definition for static builds to CMake (Markus Rickert),<br/>
  Add CI for CMake on Linux and MinGW (Markus Rickert),<br/>
  Fix variable name in win32/configure.js (Nick Wellnhofer),<br/>
  Fix version parsing in win32/configure.js (Nick Wellnhofer),<br/>
  Fix autotools warnings (Nick Wellnhofer),<br/>
  Update config.h.cmake.in (Markus Rickert),<br/>
  win32: allow passing *FLAGS on command line (Michael Stahl),<br/>
  Configure file xmlwin32version.h.in on MSVC (Markus Rickert),<br/>
  List headers individually (Markus Rickert),<br/>
  Add CMake build files (Markus Rickert),<br/>
  Parenthesize Py&lt;type&gt;_Check() in ifs (Miro Hrončok),<br/>
  Minor fixes to configure.js (Nick Wellnhofer)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Fix null deref in legacy SAX1 parser (Nick Wellnhofer),<br/>
  Fix handling of unexpected EOF in xmlParseContent (Nick Wellnhofer),<br/>
  Fix line numbers in error messages for mismatched tags (Nick Wellnhofer),<br/>
  Fix htmlTagLookup (Nick Wellnhofer),<br/>
  Propagate error in xmlParseElementChildrenContentDeclPriv (Nick Wellnhofer),<br/>
  Fix user-after-free with `xmllint --xinclude --dropdtd` (Nick Wellnhofer),<br/>
  Fix dangling pointer with `xmllint --dropdtd` (Nick Wellnhofer),<br/>
  Validate UTF8 in xmlEncodeEntities (Joel Hockey),<br/>
  Fix use-after-free with `xmllint --html --push` (Nick Wellnhofer),<br/>
  Allow FP division by zero in xmlXPathInit (Nick Wellnhofer),<br/>
  Fix xmlGetNodePath with invalid node types (Nick Wellnhofer),<br/>
  Fix exponential behavior with recursive entities (Nick Wellnhofer),<br/>
  Fix quadratic behavior when looking up xml:* attributes (Nick Wellnhofer),<br/>
  Fix slow parsing of HTML with encoding errors (Nick Wellnhofer),<br/>
  Fix null deref introduced with previous commit (Nick Wellnhofer),<br/>
  Check for invalid redeclarations of predefined entities (Nick Wellnhofer),<br/>
  Add the copy of type from original xmlDoc in xmlCopyDoc() (SVGAnimate),<br/>
  parser.c: shrink the input buffer when appropriate (Mike Dalessio),<br/>
  Fix infinite loop in HTML parser introduced with recent commits (Nick Wellnhofer),<br/>
  Fix quadratic runtime when parsing CDATA sections (Nick Wellnhofer),<br/>
  Fix timeout when handling recursive entities (Nick Wellnhofer),<br/>
  Fix memory leak in xmlParseElementMixedContentDecl (Nick Wellnhofer),<br/>
  Fix null deref in xmlStringGetNodeList (Nick Wellnhofer),<br/>
  use new htmlParseLookupCommentEnd to find comment ends (Mike Dalessio),<br/>
  htmlParseComment: treat `--!&gt;` as if it closed the comment (Mike Dalessio),<br/>
  Fix integer overflow in xmlSchemaGetParticleTotalRangeMin (Nick Wellnhofer),<br/>
  encoding: fix memleak in xmlRegisterCharEncodingHandler() (Xiaoming Ni),<br/>
  xmlschemastypes.c: xmlSchemaGetFacetValueAsULong add, check "facet-&gt;val" (Xiaoming Ni),<br/>
  Fix null pointer deref in xmlXPtrRangeInsideFunction (Nick Wellnhofer),<br/>
  Fix quadratic runtime in HTML push parser with null bytes (Nick Wellnhofer),<br/>
  Avoid quadratic checking of identity-constraints (Michael Matz),<br/>
  Fix building with ICU 68. (Frederik Seiffert),<br/>
  Convert python/libxml.c to PY_SSIZE_T_CLEAN (Victor Stinner),<br/>
  Fix xmlURIEscape memory leaks. (Elliott Hughes),<br/>
  Avoid call stack overflow with XML reader and recursive XIncludes (Nick Wellnhofer),<br/>
  Fix caret in regexp character group (Nick Wellnhofer),<br/>
  parser.c: xmlParseCharData peek behavior fixed wrt newlines (Mike Dalessio),<br/>
  Fix memory leaks in XPointer string-range function (Nick Wellnhofer),<br/>
  Fix use-after-free when XIncluding text from Reader (Nick Wellnhofer),<br/>
  Fix SEGV in xmlSAXParseFileWithData (yanjinjq),<br/>
  Fix null deref in XPointer expression error path (Nick Wellnhofer),<br/>
  Don't call xmlXPathInit directly (Nick Wellnhofer),<br/>
  Fix cleanup of attributes in XML reader (Nick Wellnhofer),<br/>
  Fix double free in XML reader with XIncludes (Nick Wellnhofer),<br/>
  Fix memory leak in xmlXIncludeAddNode error paths (Nick Wellnhofer),<br/>
  Revert "Fix quadratic runtime in xi:fallback processing" (Nick Wellnhofer),<br/>
  Fix error reporting with xi:fallback (Nick Wellnhofer),<br/>
  Fix quadratic runtime in xi:fallback processing (Nick Wellnhofer),<br/>
  Fix corner case with empty xi:fallback (Nick Wellnhofer),<br/>
  Fix XInclude regression introduced with recent commit (Nick Wellnhofer),<br/>
  Fix memory leak in runtest.c (Nick Wellnhofer),<br/>
  Make "xmllint --push --recovery" work (Nick Wellnhofer),<br/>
  Revert "Do not URI escape in server side includes" (Nick Wellnhofer),<br/>
  Fix column number accounting in xmlParse*NameAndCompare (Nick Wellnhofer),<br/>
  Stop counting nbChars in parser context (Nick Wellnhofer),<br/>
  Fix out-of-bounds read with 'xmllint --htmlout' (Nick Wellnhofer),<br/>
  Fix exponential runtime and memory in xi:fallback processing (Nick Wellnhofer),<br/>
  Don't process siblings of root in xmlXIncludeProcess (Nick Wellnhofer),<br/>
  Don't recurse into xi:include children in xmlXIncludeDoProcess (Nick Wellnhofer),<br/>
  Fix memory leak in xmlXIncludeIncludeNode error paths (Nick Wellnhofer),<br/>
  Check for custom free function in global destructor (Nick Wellnhofer),<br/>
  Fix integer overflow when comparing schema dates (Nick Wellnhofer),<br/>
  Fix exponential runtime in xmlFARecurseDeterminism (Nick Wellnhofer),<br/>
  Don't try to handle namespaces when building HTML documents (Nick Wellnhofer),<br/>
  Fix several quadratic runtime issues in HTML push parser (Nick Wellnhofer),<br/>
  Fix quadratic runtime when push parsing HTML start tags (Nick Wellnhofer),<br/>
  Reset XML parser input before reporting errors (David Kilzer),<br/>
  Fix quadratic runtime when push parsing HTML entity refs (Nick Wellnhofer),<br/>
  Fix HTML push parser lookahead (Nick Wellnhofer),<br/>
  Make htmlCurrentChar always translate U+0000 (Nick Wellnhofer),<br/>
  Fix UTF-8 decoder in HTML parser (Nick Wellnhofer),<br/>
  Fix quadratic runtime when parsing HTML script content (Nick Wellnhofer),<br/>
  Reset HTML parser input before reporting error (Nick Wellnhofer),<br/>
  Fix more quadratic runtime issues in HTML push parser (Nick Wellnhofer),<br/>
  Fix regression introduced with 477c7f6a (Nick Wellnhofer),<br/>
  Fix quadratic runtime in HTML parser (Nick Wellnhofer),<br/>
  Reset HTML parser input before reporting encoding error (Nick Wellnhofer),<br/>
  Fix integer overflow in xmlFAParseQuantExact (Nick Wellnhofer),<br/>
  Fix return value of xmlC14NDocDumpMemory (Nick Wellnhofer),<br/>
  Don't follow next pointer on documents in xmlXPathRunStreamEval (Nick Wellnhofer),<br/>
  Fix integer overflow in _xmlSchemaParseGYear (Nick Wellnhofer),<br/>
  Fix integer overflow when parsing {min,max}Occurs (Nick Wellnhofer),<br/>
  Fix another memory leak in xmlSchemaValAtomicType (Nick Wellnhofer),<br/>
  Fix unsigned integer overflow in htmlParseTryOrFinish (Nick Wellnhofer),<br/>
  Fix integer overflow in htmlParseCharRef (Nick Wellnhofer),<br/>
  Fix undefined behavior in UTF16LEToUTF8 (Nick Wellnhofer),<br/>
  Fix return value of xmlCharEncOutput (Nick Wellnhofer),<br/>
  Never expand parameter entities in text declaration (Nick Wellnhofer),<br/>
  Fix undefined behavior in xmlXPathTryStreamCompile (Nick Wellnhofer),<br/>
  Fix use-after-free with validating reader (Nick Wellnhofer),<br/>
  xmlParseBalancedChunkMemory must not be called with NULL doc (Nick Wellnhofer),<br/>
  Revert "Fix memory leak in xmlParseBalancedChunkMemoryRecover" (Nick Wellnhofer),<br/>
  Fix memory leak in xmlXIncludeLoadDoc error path (Nick Wellnhofer),<br/>
  Make schema validation fail with multiple top-level elements (Nick Wellnhofer),<br/>
  Call xmlCleanupParser on ELF destruction (Samuel Thibault),<br/>
  Fix copying of entities in xmlParseReference (Nick Wellnhofer),<br/>
  Fix memory leak in xmlSchemaValidateStream (Zhipeng Xie),<br/>
  Fix xmlSchemaGetCanonValue formatting for date and dateTime (Kevin Puetz),<br/>
  Fix memory leak when shared libxml.dll is unloaded (Kevin Puetz),<br/>
  Fix potentially-uninitialized critical section in Win32 DLL builds (Kevin Puetz),<br/>
  Fix integer overflow in xmlBufferResize (Nick Wellnhofer),<br/>
  Check for overflow when allocating two-dimensional arrays (Nick Wellnhofer),<br/>
  Remove useless comparisons (Nick Wellnhofer),<br/>
  Fix overflow check in xmlNodeDump (Nick Wellnhofer),<br/>
  Fix infinite loop in xmlStringLenDecodeEntities (Zhipeng Xie),<br/>
  Fix freeing of nested documents (Nick Wellnhofer),<br/>
  Fix more memory leaks in error paths of XPath parser (Nick Wellnhofer),<br/>
  Fix memory leaks of encoding handlers in xmlsave.c (Nick Wellnhofer),<br/>
  Fix xml2-config error code (Nick Wellnhofer),<br/>
  Fix memory leak in error path of XPath expr parser (Nick Wellnhofer),<br/>
  Fix overflow handling in xmlBufBackToBuffer (Nick Wellnhofer),<br/>
  Null pointer handling in catalog.c (raniervf),<br/>
  xml2-config.in: fix regressions introduced by commit 2f2bf4b2c (Dmitry V. Levin)<br/>
  </li>

  <li>Improvements:<br/>
  Store per-element parser state in a struct (Nick Wellnhofer),<br/>
  update for xsd:language type check (PaulHiggs),<br/>
  Update INSTALL.libxml2 (Nick Wellnhofer),<br/>
  Fix include order in c14n.h (Nick Wellnhofer),<br/>
  Fix duplicate xmlStrEqual calls in htmlParseEndTag (Nick Wellnhofer),<br/>
  Speed up htmlCheckAutoClose (Nick Wellnhofer),<br/>
  Speed up htmlTagLookup (Nick Wellnhofer),<br/>
  Stop checking attributes for UTF-8 validity (Nick Wellnhofer),<br/>
  Reduce some fuzzer timeouts (Nick Wellnhofer),<br/>
  Only run a few CI tests unless scheduled (Nick Wellnhofer),<br/>
  Improve fuzzer stability (Nick Wellnhofer),<br/>
  Check for feature flags in fuzzer tests (Nick Wellnhofer),<br/>
  Another attempt at improving fuzzer stability (Nick Wellnhofer),<br/>
  Revert "Improve HTML fuzzer stability" (Nick Wellnhofer),<br/>
  Add charset names to fuzzing dictionaries (Nick Wellnhofer),<br/>
  Improve HTML fuzzer stability (Nick Wellnhofer),<br/>
  Add CI for MSVC x86 (Markus Rickert),<br/>
  Add a flag to not output anything when xmllint succeeded (hhb),<br/>
  Speed up HTML fuzzer (Nick Wellnhofer),<br/>
  Remove unused encoding parameter of HTML output functions (Nick Wellnhofer),<br/>
  Handle malloc failures in fuzzing code (Nick Wellnhofer),<br/>
  add test coverage for incorrectly-closed comments (Mike Dalessio),<br/>
  Enforce maximum length of fuzz input (Nick Wellnhofer),<br/>
  Remove temporary members from struct _xmlXPathContext (Nick Wellnhofer),<br/>
  Build the Python extension with PY_SSIZE_T_CLEAN (Victor Stinner),<br/>
  Add CI test for Python 3 (Nick Wellnhofer),<br/>
  Add fuzzing dictionaries to EXTRA_DIST (Nick Wellnhofer),<br/>
  Add 'fuzz' subdirectory to DIST_SUBDIRS (Nick Wellnhofer),<br/>
  Allow port numbers up to INT_MAX (Nick Wellnhofer),<br/>
  Handle dumps of corrupted documents more gracefully (Nick Wellnhofer),<br/>
  Limit size of free lists in XML reader when fuzzing (Nick Wellnhofer),<br/>
  Hardcode maximum XPath recursion depth (Nick Wellnhofer),<br/>
  Pass URL of main entity in XML fuzzer (Nick Wellnhofer),<br/>
  Consolidate seed corpus generation (Nick Wellnhofer),<br/>
  Test fuzz targets with dummy driver (Nick Wellnhofer),<br/>
  Fix regression introduced with commit d88df4b (Nick Wellnhofer),<br/>
  Fix regression introduced with commit 74dcc10b (Nick Wellnhofer),<br/>
  Add TODO comment in xinclude.c (Nick Wellnhofer),<br/>
  Stop using maxParserDepth in xpath.c (Nick Wellnhofer),<br/>
  Remove dead code in xinclude.c (Nick Wellnhofer),<br/>
  Don't add formatting newlines to XInclude nodes (Nick Wellnhofer),<br/>
  Don't use SAX1 if all element handlers are NULL (Nick Wellnhofer),<br/>
  Remove unneeded progress checks in HTML parser (Nick Wellnhofer),<br/>
  Use strcmp when fuzzing (Nick Wellnhofer),<br/>
  Fix XPath fuzzer (Nick Wellnhofer),<br/>
  Fuzz XInclude engine (Nick Wellnhofer),<br/>
  Add XPath and XPointer fuzzer (Nick Wellnhofer),<br/>
  Update fuzzing code (Nick Wellnhofer),<br/>
  More *NodeDumpOutput fixes (Nick Wellnhofer),<br/>
  Fix *NodeDumpOutput functions (Nick Wellnhofer),<br/>
  Make xmlNodeDumpOutputInternal non-recursive (Nick Wellnhofer),<br/>
  Make xhtmlNodeDumpOutput non-recursive (Nick Wellnhofer),<br/>
  Make htmlNodeDumpFormatOutput non-recursive (Nick Wellnhofer),<br/>
  Fix .gitattributes (Nick Wellnhofer),<br/>
  Rework control flow in htmlCurrentChar (Nick Wellnhofer),<br/>
  Make 'xmllint --html --push -' read from stdin (Nick Wellnhofer),<br/>
  Remove misleading comments in xpath.c (Nick Wellnhofer),<br/>
  Update to Devhelp index file format version 2 (Andre Klapper),<br/>
  Set project language to C (Markus Rickert),<br/>
  Add variable for working directory of XML Conformance Test Suite (Markus Rickert),<br/>
  Add additional tests and XML Conformance Test Suite (Markus Rickert),<br/>
  Add command line option for temp directory in runtest (Markus Rickert),<br/>
  Ensure LF line endings for test files (Markus Rickert),<br/>
  Enable runtests and testThreads (Markus Rickert),<br/>
  Limit regexp nesting depth (Nick Wellnhofer),<br/>
  Fix return values and documentation in encoding.c (Nick Wellnhofer),<br/>
  Add regexp regression tests (David Kilzer),<br/>
  Report error for invalid regexp quantifiers (Nick Wellnhofer),<br/>
  Fix rebuilding docs, by hiding __attribute__((...)) behind a macro. (Martin Vidner),<br/>
  Copy xs:duration parser from libexslt (Nick Wellnhofer),<br/>
  Fuzz target for XML Schemas (Nick Wellnhofer),<br/>
  Move entity recorder to fuzz.c (Nick Wellnhofer),<br/>
  Fuzz target for HTML parser (Nick Wellnhofer),<br/>
  Update GitLab CI container (Nick Wellnhofer),<br/>
  Add options file for xml fuzzer (Nick Wellnhofer),<br/>
  Add a couple of libFuzzer targets (Nick Wellnhofer),<br/>
  Guard new calls to xmlValidatePopElement in xml_reader.c (Daniel Cheng),<br/>
  Add LIBXML_VALID_ENABLED to xmlreader (Łukasz Wojniłowicz),<br/>
  Fix typos (Nick Wellnhofer),<br/>
  Disable LeakSanitizer (Nick Wellnhofer),<br/>
  Stop calling SAX getEntity handler from XMLReader (Nick Wellnhofer),<br/>
  Add test case for recursive external parsed entities (Nick Wellnhofer),<br/>
  Enable error tests with entity substitution (Nick Wellnhofer),<br/>
  Don't load external entity from xmlSAX2GetEntity (Nick Wellnhofer),<br/>
  Merge code paths loading external entities (Nick Wellnhofer),<br/>
  Copy some XMLReader option flags to parser context (Nick Wellnhofer),<br/>
  Add xmlPopOutputCallbacks (Nick Wellnhofer),<br/>
  Updated Python test reader2.py (Pieter van Oostrum),<br/>
  Updated python/tests/tstLastError.py (Pieter van Oostrum),<br/>
  Use random seed in xmlDictComputeFastKey (Ranier Vilela),<br/>
  Enable more undefined behavior sanitizers (Nick Wellnhofer)<br/>
  </li>
</ul>

<h3>v2.9.10: Oct 30 2019</h3>
<ul>
  <li>Documentation:<br/>
  Fix a few more typos ("fonction") (Nick Wellnhofer),<br/>
  Large batch of typo fixes (Jared Yanovich),<br/>
  Fix typos: tree: move{ -&gt; s}, reconcil{i -&gt; }ed, h{o -&gt; e}ld by... (Jan Pokorný),<br/>
  Fix typo: xpath: simpli{ -&gt; fi}ed (Jan Pokorný),<br/>
  Doc: do not mislead towards "infeasible" scenario wrt. xmlBufNodeDump (Jan Pokorný),<br/>
  Fix comments in test code (zhouzhongyuan),<br/>
  fix comment in testReader.c (zhouzhongyuan)<br/>
  </li>

  <li>Portability:<br/>
  Fix some release issues on Fedora 30 (Daniel Veillard),<br/>
  Fix exponent digits when running tests under old MSVC (Daniel Richard G),<br/>
  Work around buggy ceil() function on AIX (Daniel Richard G),<br/>
  Don't call printf with NULL string in runtest.c (Daniel Richard G),<br/>
  Switched from unsigned long to ptrdiff_t in parser.c (Stephen Chenney),<br/>
  timsort.h: support older GCCs (Jérôme Duval),<br/>
  Make configure.ac work with older pkg-config (Nick Wellnhofer),<br/>
  Stop defining _REENTRANT on some Win32 platforms (Nick Wellnhofer),<br/>
  Fix nanohttp.c on MinGW (Nick Wellnhofer),<br/>
  Fix Windows compiler warning in testC14N.c (Nick Wellnhofer),<br/>
  Merge testThreadsWin32.c into testThreads.c (Nick Wellnhofer),<br/>
  Fix Python bindings under Windows (Nick Wellnhofer)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Another fix for conditional sections at end of document (Nick Wellnhofer),<br/>
  Fix for conditional sections at end of document (Nick Wellnhofer),<br/>
  Make sure that Python tests exit with error code (Nick Wellnhofer),<br/>
  Audit memory error handling in xpath.c (Nick Wellnhofer),<br/>
  Fix error code in xmlTextWriterStartDocument (Nick Wellnhofer),<br/>
  Fix integer overflow when counting written bytes (Nick Wellnhofer),<br/>
  Fix uninitialized memory access in HTML parser (Nick Wellnhofer),<br/>
  Fix memory leak in xmlSchemaValAtomicType (Nick Wellnhofer),<br/>
  Disallow conditional sections in internal subset (Nick Wellnhofer),<br/>
  Fix use-after-free in xmlTextReaderFreeNodeList (Nick Wellnhofer),<br/>
  Fix Regextests (Nick Wellnhofer),<br/>
  Fix empty branch in regex (Nick Wellnhofer),<br/>
  Fix integer overflow in entity recursion check (Nick Wellnhofer),<br/>
  Don't read external entities or XIncludes from stdin (Nick Wellnhofer),<br/>
  Fix Schema determinism check of ##other namespaces (Nick Wellnhofer),<br/>
  Fix potential null deref in xmlSchemaIDCFillNodeTables (zhouzhongyuan),<br/>
  Fix potential memory leak in xmlBufBackToBuffer (Nick Wellnhofer),<br/>
  Fix error message when processing XIncludes with fallbacks (Nick Wellnhofer),<br/>
  Fix memory leak in xmlRegEpxFromParse (zhouzhongyuan),<br/>
  14:00 is a valid timezone for xs:dateTime (Nick Wellnhofer),<br/>
  Fix memory leak in xmlParseBalancedChunkMemoryRecover (Zhipeng Xie),<br/>
  Fix potential null deref in xmlRelaxNGParsePatterns (Nick Wellnhofer),<br/>
  Misleading error message with xs:{min|max}Inclusive (bettermanzzy),<br/>
  Fix memory leak in xmlXIncludeLoadTxt (Wang Kirin),<br/>
  Partial fix for comparison of xs:durations (Nick Wellnhofer),<br/>
  Fix null deref in xmlreader buffer (zhouzhongyuan),<br/>
  Fix unability to RelaxNG-validate grammar with choice-based name class (Jan Pokorný),<br/>
  Fix unability to validate ambiguously constructed interleave for RelaxNG (Jan Pokorný),<br/>
  Fix possible null dereference in xmlXPathIdFunction (zhouzhongyuan),<br/>
  fix memory leak in xmlAllocOutputBuffer (zhouzhongyuan),<br/>
  Fix unsigned int overflow (Jens Eggerstedt),<br/>
  dict.h: gcc 2.95 doesn't allow multiple storage classes (Nick Wellnhofer),<br/>
  Fix another code path in xmlParseQName (Nick Wellnhofer),<br/>
  Make sure that xmlParseQName returns NULL in error case (Nick Wellnhofer),<br/>
  Fix build without reader but with pattern (Nick Wellnhofer),<br/>
  Fix memory leak in xmlAllocOutputBufferInternal error path (Nick Wellnhofer),<br/>
  Fix unsigned integer overflow (Nick Wellnhofer),<br/>
  Fix return value of xmlOutputBufferWrite (Nick Wellnhofer),<br/>
  Fix parser termination from "Double hyphen within comment" error (David Warring),<br/>
  Fix call stack overflow in xmlFreePattern (Nick Wellnhofer),<br/>
  Fix null deref in previous commit (Nick Wellnhofer),<br/>
  Fix memory leaks in xmlXPathParseNameComplex error paths (Nick Wellnhofer),<br/>
  Check for integer overflow in xmlXPtrEvalChildSeq (Nick Wellnhofer),<br/>
  Fix xmllint dump of XPath namespace nodes (Nick Wellnhofer),<br/>
  Fix float casts in xmlXPathSubstringFunction (Nick Wellnhofer),<br/>
  Fix null deref in xmlregexp error path (Nick Wellnhofer),<br/>
  Fix null pointer dereference in xmlTextReaderReadOuterXml (Nick Wellnhofer),<br/>
  Fix memory leaks in xmlParseStartTag2 error paths (Nick Wellnhofer),<br/>
  Fix memory leak in xmlSAX2StartElement (Nick Wellnhofer),<br/>
  Fix commit "Memory leak in xmlFreeID (xmlreader.c)" (Nick Wellnhofer),<br/>
  Fix NULL pointer deref in xmlTextReaderValidateEntity (Nick Wellnhofer),<br/>
  Memory leak in xmlFreeTextReader (Nick Wellnhofer),<br/>
  Memory leak in xmlFreeID (xmlreader.c) (Nick Wellnhofer)<br/>
  </li>

  <li>Improvements:<br/>
  Run XML conformance tests under CI (Nick Wellnhofer),<br/>
  Update GitLab CI config (Nick Wellnhofer),<br/>
  Propagate memory errors in valuePush (Nick Wellnhofer),<br/>
  Propagate memory errors in xmlXPathCompExprAdd (Nick Wellnhofer),<br/>
  Make xmlFreeDocElementContent non-recursive (Nick Wellnhofer),<br/>
  Enable continuous integration via GitLab CI (Nick Wellnhofer),<br/>
  Avoid ignored attribute warnings under GCC (Nick Wellnhofer),<br/>
  Make xmlDumpElementContent non-recursive (Nick Wellnhofer),<br/>
  Make apibuild.py ignore ATTRIBUTE_NO_SANITIZE (Nick Wellnhofer),<br/>
  Mark xmlExp* symbols as removed (Nick Wellnhofer),<br/>
  Make xmlParseConditionalSections non-recursive (Nick Wellnhofer),<br/>
  Adjust expected error in Python tests (Nick Wellnhofer),<br/>
  Make xmlTextReaderFreeNodeList non-recursive (Nick Wellnhofer),<br/>
  Make xmlFreeNodeList non-recursive (Nick Wellnhofer),<br/>
  Make xmlParseContent and xmlParseElement non-recursive (Nick Wellnhofer),<br/>
  Remove executable bit from non-executable files (Nick Wellnhofer),<br/>
  Fix expected output of test/schemas/any4 (Nick Wellnhofer),<br/>
  Optimize build instructions in README (zhouzhongyuan),<br/>
  xml2-config.in: Output CFLAGS and LIBS on the same line (Hugh McMaster),<br/>
  xml2-config: Add a --dynamic switch to print only shared libraries (Hugh McMaster),<br/>
  Annotate functions with __attribute__((no_sanitize)) (Nick Wellnhofer),<br/>
  Fix warnings when compiling without reader or push parser (Nick Wellnhofer),<br/>
  Remove unused member `doc` in xmlSaveCtxt (Nick Wellnhofer),<br/>
  Limit recursion depth in xmlXPathCompOpEvalPredicate (Nick Wellnhofer),<br/>
  Remove -Wno-array-bounds (Nick Wellnhofer),<br/>
  Remove unreachable code in xmlXPathCountFunction (Nick Wellnhofer),<br/>
  Improve XPath predicate and filter evaluation (Nick Wellnhofer),<br/>
  Limit recursion depth in xmlXPathOptimizeExpression (Nick Wellnhofer),<br/>
  Disable hash randomization when fuzzing (Nick Wellnhofer),<br/>
  Optional recursion limit when parsing XPath expressions (Nick Wellnhofer),<br/>
  Optional recursion limit when evaluating XPath expressions (Nick Wellnhofer),<br/>
  Use break statements in xmlXPathCompOpEval (Nick Wellnhofer),<br/>
  Optional XPath operation limit (Nick Wellnhofer),<br/>
  Fix compilation with --with-minimum (Nick Wellnhofer),<br/>
  Check XPath stack after calling functions (Nick Wellnhofer),<br/>
  Remove debug printf in xmlreader.c (Nick Wellnhofer),<br/>
  Always define LIBXML_THREAD_ENABLED when enabled (Michael Haubenwallner),<br/>
  Regenerate NEWS (Nick Wellnhofer),<br/>
  Change git repo URL (Nick Wellnhofer),<br/>
  Change bug tracker URL (Nick Wellnhofer),<br/>
  Remove outdated HTML file (Nick Wellnhofer),<br/>
  Fix unused function warning in testapi.c (Nick Wellnhofer),<br/>
  Add some generated test files to .gitignore (Nick Wellnhofer),<br/>
  Remove unneeded function pointer casts (Nick Wellnhofer),<br/>
  Fix -Wcast-function-type warnings (GCC 8) (Nick Wellnhofer),<br/>
  Fix -Wformat-truncation warnings (GCC 8) (Nick Wellnhofer)<br/>
  </li>

  <li>Cleanups:<br/>
  Rebuild docs (Nick Wellnhofer),<br/>
  Disable xmlExp regex code (Nick Wellnhofer),<br/>
  Remove redundant code in xmlRelaxNGValidateState (Nick Wellnhofer),<br/>
  Remove redundant code in xmlXPathCompRelationalExpr (Nick Wellnhofer)<br/>
  </li>
</ul>

<h3>v2.9.9: Jan 03 2019</h3>
<ul>
  <li>Security:<br/>
  CVE-2018-9251 CVE-2018-14567 Fix infinite loop in LZMA decompression (Nick Wellnhofer),<br/>
  CVE-2018-14404 Fix nullptr deref with XPath logic ops (Nick Wellnhofer),<br/>
  </li>

  <li>Documentation:<br/>
  reader: Fix documentation comment (Mohammed Sadiq)<br/>
  </li>

  <li>Portability:<br/>
  Fix MSVC build with lzma (Nick Wellnhofer),<br/>
  Variables need 'extern' in static lib on Cygwin (Michael Haubenwallner),<br/>
  Really declare dllexport/dllimport for Cygwin (Michael Haubenwallner),<br/>
  Merge branch 'patch-2' into 'master' (Nick Wellnhofer),<br/>
  Change dir to $THEDIR after ACLOCAL_PATH check autoreconf creates aclocal.m4 in $srcdir (Vitaly Buka),<br/>
  Improve error message if pkg.m4 couldn't be found (Nick Wellnhofer),<br/>
  NaN and Inf fixes for pre-C99 compilers (Nick Wellnhofer)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Revert "Support xmlTextReaderNextSibling w/o preparsed doc" (Nick Wellnhofer),<br/>
  Fix building relative URIs (Thomas Holder),<br/>
  Problem with data in interleave in RelaxNG validation (Nikolai Weibull),<br/>
  Fix memory leak in xmlSwitchInputEncodingInt error path (Nick Wellnhofer),<br/>
  Set doc on element obtained from freeElems (Nick Wellnhofer),<br/>
  Fix HTML serialization with UTF-8 encoding (Nick Wellnhofer),<br/>
  Use actual doc in xmlTextReaderRead*Xml (Nick Wellnhofer),<br/>
  Unlink node before freeing it in xmlSAX2StartElement (Nick Wellnhofer),<br/>
  Check return value of nodePush in xmlSAX2StartElement (Nick Wellnhofer),<br/>
  Free input buffer in xmlHaltParser (Nick Wellnhofer),<br/>
  Reset HTML parser input pointers on encoding failure (Nick Wellnhofer),<br/>
  Don't run icu_parse_test if EUC-JP is unsupported (Nick Wellnhofer),<br/>
  Fix xmlSchemaValidCtxtPtr reuse memory leak (Greg Hildstrom),<br/>
  Fix xmlTextReaderNext with preparsed document (Felix Bünemann),<br/>
  Remove stray character from comment (Nick Wellnhofer),<br/>
  Remove a misleading line from xmlCharEncOutput (Andrey Bienkowski),<br/>
  HTML noscript should not close p (Daniel Veillard),<br/>
  Don't change context node in xmlXPathRoot (Nick Wellnhofer),<br/>
  Stop using XPATH_OP_RESET (Nick Wellnhofer),<br/>
  Revert "Change calls to xmlCharEncInput to set flush false" (Nick Wellnhofer)<br/>
  </li>

  <li>Improvements:<br/>
  Fix "Problem with data in interleave in RelaxNG validation" (Nikolai Weibull),<br/>
  cleanup: remove some unreachable code (Thomas Holder),<br/>
  add --relative to testURI (Thomas Holder),<br/>
  Remove redefined starts and defines inside include elements (Nikolai Weibull),<br/>
  Allow choice within choice in nameClass in RELAX NG (Nikolai Weibull),<br/>
  Look inside divs for starts and defines inside include (Nikolai Weibull),<br/>
  Add compile and libxml2-config.cmake to .gitignore (Nikolai Weibull),<br/>
  Stop using doc-&gt;charset outside parser code (Nick Wellnhofer),<br/>
  Add newlines to 'xmllint --xpath' output (Nick Wellnhofer),<br/>
  Don't include SAX.h from globals.h (Nick Wellnhofer),<br/>
  Support xmlTextReaderNextSibling w/o preparsed doc (Felix Bünemann),<br/>
  Don't instruct user to run make when autogen.sh failed (林博仁(Buo-ren Lin)),<br/>
  Run Travis ASan tests with "sudo: required" (Nick Wellnhofer),<br/>
  Improve restoring of context size and position (Nick Wellnhofer),<br/>
  Simplify and harden nodeset filtering (Nick Wellnhofer),<br/>
  Avoid unnecessary backups of the context node (Nick Wellnhofer),<br/>
  Fix inconsistency in xmlXPathIsInf (Nick Wellnhofer)<br/>
  </li>

  <li>Cleanups:<br/>
  </li>
</ul>
<h3>v2.9.8: Mar 05 2018</h3>
<ul>
  <li>Portability:<br/>
  python: remove single use of _PyVerify_fd (Patrick Welche),<br/>
  Build more test executables on Windows/MSVC (Nick Wellnhofer),<br/>
  Stop including ansidecl.h (Nick Wellnhofer),<br/>
  Fix libz and liblzma detection (Nick Wellnhofer),<br/>
  Revert "Compile testapi with -Wno-unused-function" (Nick Wellnhofer)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Fix xmlParserEntityCheck (Nick Wellnhofer),<br/>
  Halt parser in case of encoding error (Nick Wellnhofer),<br/>
  Clear entity content in case of errors (Nick Wellnhofer),<br/>
  Change calls to xmlCharEncInput to set flush false when not final call. Having flush incorrectly set to true causes errors for ICU. (Joel Hockey),<br/>
  Fix buffer over-read in xmlParseNCNameComplex (Nick Wellnhofer),<br/>
  Fix ICU library filenames on Windows/MSVC (Nick Wellnhofer),<br/>
  Fix xmlXPathIsNaN broken by recent commit (Nick Wellnhofer),<br/>
  Fix -Wenum-compare warnings (Nick Wellnhofer),<br/>
  Fix callback signature in testapi.c (Nick Wellnhofer),<br/>
  Fix unused parameter warning without ICU (Nick Wellnhofer),<br/>
  Fix IO callback signatures (Nick Wellnhofer),<br/>
  Fix misc callback signatures (Nick Wellnhofer),<br/>
  Fix list callback signatures (Nick Wellnhofer),<br/>
  Fix hash callback signatures (Nick Wellnhofer),<br/>
  Refactor name and type signature for xmlNop (Vlad Tsyrklevich),<br/>
  Fixed ICU to set flush correctly and provide pivot buffer. (Joel Hockey),<br/>
  Skip EBCDIC tests if EBCDIC isn't supported (Nick Wellnhofer)<br/>
  </li>

  <li>Improvements:<br/>
  Disable pointer-overflow UBSan checks under Travis (Nick Wellnhofer),<br/>
  Improve handling of context input_id (Daniel Veillard),<br/>
  Add resource file to Windows DLL (ccpaging),<br/>
  Run Travis tests with -Werror (Nick Wellnhofer),<br/>
  Build with "-Wall -Wextra" (Nick Wellnhofer),<br/>
  Fix -Wtautological-pointer-compare warnings (Nick Wellnhofer),<br/>
  Remove unused AC_CHECKs (Nick Wellnhofer),<br/>
  Update information about contributing (Nick Wellnhofer),<br/>
  Fix -Wmisleading-indentation warnings (Nick Wellnhofer),<br/>
  Don't touch CFLAGS in configure.ac (Nick Wellnhofer),<br/>
  Ignore function pointer cast warnings (Nick Wellnhofer),<br/>
  Simplify XPath NaN, inf and -0 handling (Nick Wellnhofer),<br/>
  Introduce xmlPosixStrdup and update xmlMemStrdup (Nick Wellnhofer),<br/>
  Add test for ICU flush and pivot buffer (Nick Wellnhofer),<br/>
  Compile testapi with -Wno-unused-function (Nick Wellnhofer)<br/>
  </li>
</ul>
<h3>2.9.7: Nov 02 2017</h3>
<ul>
  <li>Documentation:<br/>
  xmlcatalog: refresh man page wrt. querying system catalog easily (Jan Pokorný)<br/>
  </li>

  <li>Portability:<br/>
  Fix deprecated Travis compiler flag (Nick Wellnhofer),<br/>
  Add declaration for DllMain (J. Peter Mugaas),<br/>
  Fix preprocessor conditional in threads.h (J. Peter Mugaas),<br/>
  Fix pointer comparison warnings on 64-bit Windows (J. Peter Mugaas),<br/>
  Fix macro redefinition warning (J. Peter Mugaas),<br/>
  Default to native threads on MinGW-w64 (Nick Wellnhofer),<br/>
  Simplify Windows IO functions (Nick Wellnhofer),<br/>
  Fix runtest on Windows (Nick Wellnhofer),<br/>
  socklen_t is always int on Windows (Nick Wellnhofer),<br/>
  Don't redefine socket error codes on Windows (Nick Wellnhofer),<br/>
  Fix pointer/int cast warnings on 64-bit Windows (Nick Wellnhofer),<br/>
  Fix Windows compiler warnings in xmlCanonicPath (Nick Wellnhofer)<br/>
  </li>

  <li>Bug Fixes:<br/>
  xmlcatalog: restore ability to query system catalog easily (Jan Pokorný),<br/>
  Fix comparison of nodesets to strings (Nick Wellnhofer)<br/>
  </li>

  <li>Improvements:<br/>
  Add Makefile rules to rebuild HTML man pages (Nick Wellnhofer),<br/>
  Fix mixed decls and code in timsort.h (Nick Wellnhofer),<br/>
  Rework handling of return values in thread tests (Nick Wellnhofer),<br/>
  Fix unused variable warnings in testrecurse (Nick Wellnhofer),<br/>
  Fix -Wimplicit-fallthrough warnings (J. Peter Mugaas),<br/>
  Upgrade timsort.h to latest revision (Nick Wellnhofer),<br/>
  Increase warning level to /W3 under MSVC (Nick Wellnhofer),<br/>
  Fix a couple of warnings in dict.c and threads.c (Nick Wellnhofer),<br/>
  Update .gitignore for Windows (Nick Wellnhofer),<br/>
  Fix unused variable warnings in nanohttp.c (Nick Wellnhofer),<br/>
  Fix the Windows header mess (Nick Wellnhofer),<br/>
  Don't include winsock2.h in xmllint.c (Nick Wellnhofer),<br/>
  Remove generated file python/setup.py from version control (Nick Wellnhofer),<br/>
  Use __linux__ macro in generated code (Nick Wellnhofer)<br/>
  </li>

</ul>
<h3>v2.9.6: Oct 06 2017</h3>
<ul>
  <li>Portability:<br/>
  Change preprocessor OS tests to __linux__ (Nick Wellnhofer)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Fix XPath stack frame logic (Nick Wellnhofer),<br/>
  Report undefined XPath variable error message (Nick Wellnhofer),<br/>
  Fix regression with librsvg (Nick Wellnhofer),<br/>
  Handle more invalid entity values in recovery mode (Nick Wellnhofer),<br/>
  Fix structured validation errors (Nick Wellnhofer),<br/>
  Fix memory leak in LZMA decompressor (Nick Wellnhofer),<br/>
  Set memory limit for LZMA decompression (Nick Wellnhofer),<br/>
  Handle illegal entity values in recovery mode (Nick Wellnhofer),<br/>
  Fix debug dump of streaming XPath expressions (Nick Wellnhofer),<br/>
  Fix memory leak in nanoftp (Nick Wellnhofer),<br/>
  Fix memory leaks in SAX1 parser (Nick Wellnhofer)<br/>
  </li>
</ul>
<h3>v2.9.5: Sep 04 2017</h3>
<ul>

  <li>Security:<br/>
  Detect infinite recursion in parameter entities (Nick Wellnhofer),<br/>
  Fix handling of parameter-entity references (Nick Wellnhofer),<br/>
  Disallow namespace nodes in XPointer ranges (Nick Wellnhofer),<br/>
  Fix XPointer paths beginning with range-to (Nick Wellnhofer)<br/>
  </li>

  <li>Documentation:<br/>
  Documentation fixes (Nick Wellnhofer),<br/>
  Spelling and grammar fixes (Nick Wellnhofer)<br/>
  </li>

  <li>Portability:<br/>
  Adding README.zOS to list of extra files for the release (Daniel Veillard),<br/>
  Description of work needed to compile on zOS (Stéphane Michaut),<br/>
  Porting libxml2 on zOS encoding of code (Stéphane Michaut),<br/>
  small changes for OS/400 (Patrick Monnerat),<br/>
  relaxng.c, xmlschemas.c: Fix build on pre-C99 compilers (Chun-wei Fan)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Problem resolving relative URIs (Daniel Veillard),<br/>
  Fix unwanted warnings when switching encodings (Nick Wellnhofer),<br/>
  Fix signature of xmlSchemaAugmentImportedIDC (Daniel Veillard),<br/>
  Heap-buffer-overflow read of size 1 in xmlFAParsePosCharGroup (David Kilzer),<br/>
  Fix NULL pointer deref in xmlFAParseCharClassEsc (Nick Wellnhofer),<br/>
  Fix infinite loops with push parser in recovery mode (Nick Wellnhofer),<br/>
  Send xmllint usage error to stderr (Nick Wellnhofer),<br/>
  Fix NULL deref in xmlParseExternalEntityPrivate (Nick Wellnhofer),<br/>
  Make sure not to call IS_BLANK_CH when parsing the DTD (Nick Wellnhofer),<br/>
  Fix xmlHaltParser (Nick Wellnhofer),<br/>
  Fix pathological performance when outputting charrefs (Nick Wellnhofer),<br/>
  Fix invalid-source-encoding warnings in testWriter.c (Nick Wellnhofer),<br/>
  Fix duplicate SAX callbacks for entity content (David Kilzer),<br/>
  Treat URIs with scheme as absolute in C14N (Nick Wellnhofer),<br/>
  Fix copy-paste errors in error messages (Nick Wellnhofer),<br/>
  Fix sanity check in htmlParseNameComplex (Nick Wellnhofer),<br/>
  Fix potential infinite loop in xmlStringLenDecodeEntities (Nick Wellnhofer),<br/>
  Reset parser input pointers on encoding failure (Nick Wellnhofer),<br/>
  Fix memory leak in xmlParseEntityDecl error path (Nick Wellnhofer),<br/>
  Fix xmlBuildRelativeURI for URIs starting with './' (Nick Wellnhofer),<br/>
  Fix type confusion in xmlValidateOneNamespace (Nick Wellnhofer),<br/>
  Fix memory leak in xmlStringLenGetNodeList (Nick Wellnhofer),<br/>
  Fix NULL pointer deref in xmlDumpElementContent (Daniel Veillard),<br/>
  Fix memory leak in xmlBufAttrSerializeTxtContent (Nick Wellnhofer),<br/>
  Stop parser on unsupported encodings (Nick Wellnhofer),<br/>
  Check for integer overflow in memory debug code (Nick Wellnhofer),<br/>
  Fix buffer size checks in xmlSnprintfElementContent (Nick Wellnhofer),<br/>
  Avoid reparsing in xmlParseStartTag2 (Nick Wellnhofer),<br/>
  Fix undefined behavior in xmlRegExecPushStringInternal (Nick Wellnhofer),<br/>
  Check XPath exponents for overflow (Nick Wellnhofer),<br/>
  Check for overflow in xmlXPathIsPositionalPredicate (Nick Wellnhofer),<br/>
  Fix spurious error message (Nick Wellnhofer),<br/>
  Fix memory leak in xmlCanonicPath (Nick Wellnhofer),<br/>
  Fix memory leak in xmlXPathCompareNodeSetValue (Nick Wellnhofer),<br/>
  Fix memory leak in pattern error path (Nick Wellnhofer),<br/>
  Fix memory leak in parser error path (Nick Wellnhofer),<br/>
  Fix memory leaks in XPointer error paths (Nick Wellnhofer),<br/>
  Fix memory leak in xmlXPathNodeSetMergeAndClear (Nick Wellnhofer),<br/>
  Fix memory leak in XPath filter optimizations (Nick Wellnhofer),<br/>
  Fix memory leaks in XPath error paths (Nick Wellnhofer),<br/>
  Do not leak the new CData node if adding fails (David Tardon),<br/>
  Prevent unwanted external entity reference (Neel Mehta),<br/>
  Increase buffer space for port in HTTP redirect support (Daniel Veillard),<br/>
  Fix more NULL pointer derefs in xpointer.c (Nick Wellnhofer),<br/>
  Avoid function/data pointer conversion in xpath.c (Nick Wellnhofer),<br/>
  Fix format string warnings (Nick Wellnhofer),<br/>
  Disallow namespace nodes in XPointer points (Nick Wellnhofer),<br/>
  Fix comparison with root node in xmlXPathCmpNodes (Nick Wellnhofer),<br/>
  Fix attribute decoding during XML schema validation (Alex Henrie),<br/>
  Fix NULL pointer deref in XPointer range-to (Nick Wellnhofer)<br/>
  </li>

  <li>Improvements:<br/>
  Updating the spec file to reflect Fedora 24 (Daniel Veillard),<br/>
  Add const in five places to move 1 KiB to .rdata (Bruce Dawson),<br/>
  Fix missing part of comment for function xmlXPathEvalExpression() (Daniel Veillard),<br/>
  Get rid of "blanks wrapper" for parameter entities (Nick Wellnhofer),<br/>
  Simplify handling of parameter entity references (Nick Wellnhofer),<br/>
  Deduplicate code in encoding.c (Nick Wellnhofer),<br/>
  Make HTML parser functions take const pointers (Nick Wellnhofer),<br/>
  Build test programs only when needed (Nick Wellnhofer),<br/>
  Fix doc/examples/index.py (Nick Wellnhofer),<br/>
  Fix compiler warnings in threads.c (Nick Wellnhofer),<br/>
  Fix empty-body warning in nanohttp.c (Nick Wellnhofer),<br/>
  Fix cast-align warnings (Nick Wellnhofer),<br/>
  Fix unused-parameter warnings (Nick Wellnhofer),<br/>
  Rework entity boundary checks (Nick Wellnhofer),<br/>
  Don't switch encoding for internal parameter entities (Nick Wellnhofer),<br/>
  Merge duplicate code paths handling PE references (Nick Wellnhofer),<br/>
  Test SAX2 callbacks with entity substitution (Nick Wellnhofer),<br/>
  Support catalog and threads tests under --without-sax1 (Nick Wellnhofer),<br/>
  Misc fixes for 'make tests' (Nick Wellnhofer),<br/>
  Initialize keepBlanks in HTML parser (Nick Wellnhofer),<br/>
  Add test cases for bug 758518 (David Kilzer),<br/>
  Fix compiler warning in htmlParseElementInternal (Nick Wellnhofer),<br/>
  Remove useless check in xmlParseAttributeListDecl (Nick Wellnhofer),<br/>
  Allow zero sized memory input buffers (Nick Wellnhofer),<br/>
  Add TODO comment in xmlSwitchEncoding (Nick Wellnhofer),<br/>
  Check for integer overflow in xmlXPathFormatNumber (Nick Wellnhofer),<br/>
  Make Travis print UBSan stacktraces (Nick Wellnhofer),<br/>
  Add .travis.yml (Nick Wellnhofer),<br/>
  Fix expected error output in Python tests (Nick Wellnhofer),<br/>
  Simplify control flow in xmlParseStartTag2 (Nick Wellnhofer),<br/>
  Disable LeakSanitizer when running API tests (Nick Wellnhofer),<br/>
  Avoid out-of-bound array access in API tests (Nick Wellnhofer),<br/>
  Avoid spurious UBSan errors in parser.c (Nick Wellnhofer),<br/>
  Parse small XPath numbers more accurately (Nick Wellnhofer),<br/>
  Rework XPath rounding functions (Nick Wellnhofer),<br/>
  Fix white space in test output (Nick Wellnhofer),<br/>
  Fix axis traversal from attribute and namespace nodes (Nick Wellnhofer),<br/>
  Check for trailing characters in XPath expressions earlier (Nick Wellnhofer),<br/>
  Rework final handling of XPath results (Nick Wellnhofer),<br/>
  Make xmlXPathEvalExpression call xmlXPathEval (Nick Wellnhofer),<br/>
  Remove unused variables (Nick Wellnhofer),<br/>
  Don't print generic error messages in XPath tests (Nick Wellnhofer)<br/>
  </li>

  <li>Cleanups:<br/>
  Fix a couple of misleading indentation errors (Daniel Veillard),<br/>
  Remove unnecessary calls to xmlPopInput (Nick Wellnhofer)<br/>
  </li>
</ul>
<h3>2.9.4: May 23 2016</h3>
<ul>
  <li>Security:<br/>
  More format string warnings with possible format string vulnerability (David Kilzer),<br/>
  Avoid building recursive entities (Daniel Veillard),<br/>
  Heap-based buffer overread in htmlCurrentChar (Pranjal Jumde),<br/>
  Heap-based buffer-underreads due to xmlParseName (David Kilzer),<br/>
  Heap use-after-free in xmlSAX2AttributeNs (Pranjal Jumde),<br/>
  Heap use-after-free in htmlParsePubidLiteral and htmlParseSystemiteral (Pranjal Jumde),<br/>
  Fix some format string warnings with possible format string vulnerability (David Kilzer),<br/>
  Detect change of encoding when parsing HTML names (Hugh Davenport),<br/>
  Fix inappropriate fetch of entities content (Daniel Veillard),<br/>
  Bug 759398: Heap use-after-free in xmlDictComputeFastKey &lt;https://bugzilla.gnome.org/show_bug.cgi?id=759398&gt; (Pranjal Jumde),<br/>
  Bug 758605: Heap-based buffer overread in xmlDictAddString &lt;https://bugzilla.gnome.org/show_bug.cgi?id=758605&gt; (Pranjal Jumde),<br/>
  Bug 758588: Heap-based buffer overread in xmlParserPrintFileContextInternal &lt;https://bugzilla.gnome.org/show_bug.cgi?id=758588&gt; (David Kilzer),<br/>
  Bug 757711: heap-buffer-overflow in xmlFAParsePosCharGroup &lt;https://bugzilla.gnome.org/show_bug.cgi?id=757711&gt; (Pranjal Jumde),<br/>
  Add missing increments of recursion depth counter to XML parser. (Peter Simons)<br/>
  </li>

  <li>Documentation:<br/>
  Fix typo: s{ ec -&gt; cr }cipt (Jan Pokorný),<br/>
  Fix typos: dictio{ nn -&gt; n }ar{y,ies} (Jan Pokorný),<br/>
  Fix typos: PATH_{ SEAPARATOR -&gt; SEPARATOR } (Jan Pokorný),<br/>
  Correct a typo. (Shlomi Fish)<br/>
  </li>

  <li>Portability:<br/>
  Correct the usage of LDFLAGS (Mattias Hansson),<br/>
  Revert the use of SAVE_LDFLAGS in configure.ac (Mattias Hansson),<br/>
  libxml2 hardcodes -L/lib in zlib/lzma tests which breaks cross-compiles (Mike Frysinger),<br/>
  Fix apibuild for a recently added construct (Daniel Veillard),<br/>
  Use pkg-config to locate zlib when possible (Stewart Brodie),<br/>
  Use pkg-config to locate ICU when possible (Stewart Brodie),<br/>
  Portability to non C99 compliant compilers (Patrick Monnerat),<br/>
  dict.h: Move xmlDictPtr definition before includes to allow direct inclusion. (Patrick Monnerat),<br/>
  os400: tell about xmllint and xmlcatalog in README400. (Patrick Monnerat),<br/>
  os400: properly process SGML add in XMLCATALOG command. (Patrick Monnerat),<br/>
  os400: implement CL command XMLCATALOG. (Patrick Monnerat),<br/>
  os400: compile and install program xmlcatalog (qshell-only). (Patrick Monnerat),<br/>
  os400: expand tabs in sources, strip trailing blanks. (Patrick Monnerat),<br/>
  os400: implement CL command XMLLINT. (Patrick Monnerat),<br/>
  os400: compile and install program xmllint (qshell-only). (Patrick Monnerat),<br/>
  os400: initscript make_module(): Use options instead of positional parameters. (Patrick Monnerat),<br/>
  os400: c14n.rpgle: allow *omit for nullable reference parameters. (Patrick Monnerat),<br/>
  os400: use like() for double type. (Patrick Monnerat),<br/>
  os400: use like() for int type. (Patrick Monnerat),<br/>
  os400: use like() for unsigned int type. (Patrick Monnerat),<br/>
  os400: use like() for enum types. (Patrick Monnerat),<br/>
  Add xz to xml2-config --libs output (Baruch Siach),<br/>
  Bug 760190: configure.ac should be able to build --with-icu without icu-config tool &lt;https://bugzilla.gnome.org/show_bug.cgi?id=760190&gt; (David Kilzer),<br/>
  win32\VC10\config.h and VS 2015 (Bruce Dawson),<br/>
  Add configure maintainer mode (orzen)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Avoid an out of bound access when serializing malformed strings (Daniel Veillard),<br/>
  Unsigned addition may overflow in xmlMallocAtomicLoc() (David Kilzer),<br/>
  Integer signed/unsigned type mismatch in xmlParserInputGrow() (David Kilzer),<br/>
  Bug 763071: heap-buffer-overflow in xmlStrncat &lt;https://bugzilla.gnome.org/show_bug.cgi?id=763071&gt; (Pranjal Jumde),<br/>
  Integer overflow parsing port number in URI (Michael Paddon),<br/>
  Fix an error with regexp on nullable counted char transition (Daniel Veillard),<br/>
  Fix memory leak with XPath namespace nodes (Nick Wellnhofer),<br/>
  Fix namespace axis traversal (Nick Wellnhofer),<br/>
      Fix null pointer deref in docs with no root element (Hugh Davenport),<br/>
  Fix XSD validation of URIs with ampersands (Alex Henrie),<br/>
  xmlschemastypes.c: accept endOfDayFrag Times set to "24:00:00" mean "end of day" and should not cause an error. (Patrick Monnerat),<br/>
  xmlcatalog: flush stdout before interactive shell input. (Patrick Monnerat),<br/>
  xmllint: flush stdout before interactive shell input. (Patrick Monnerat),<br/>
  Don't recurse into OP_VALUEs in xmlXPathOptimizeExpression (Nick Wellnhofer),<br/>
  Fix namespace::node() XPath expression (Nick Wellnhofer),<br/>
  Fix OOB write in xmlXPathEmptyNodeSet (Nick Wellnhofer),<br/>
  Fix parsing of NCNames in XPath (Nick Wellnhofer),<br/>
  Fix OOB read with invalid UTF-8 in xmlUTF8Strsize (Nick Wellnhofer),<br/>
  Do normalize string-based datatype value in RelaxNG facet checking (Audric Schiltknecht),<br/>
  Bug 760921: REGRESSION (8eb55d78): doc/examples/io1 test fails after fix for "xmlSaveUri() incorrectly recomposes URIs with rootless paths" &lt;https://bugzilla.gnome.org/show_bug.cgi?id=760921&gt; (David Kilzer),<br/>
  Bug 760861: REGRESSION (bf9c1dad): Missing results for test/schemas/regexp-char-ref_[01].xsd &lt;https://bugzilla.gnome.org/show_bug.cgi?id=760861&gt; (David Kilzer),<br/>
  error.c: *input-&gt;cur == 0 does not mean no error (Pavel Raiskup),<br/>
  Add missing RNG test files (David Kilzer),<br/>
  Bug 760183: REGRESSION (v2.9.3): XML push parser fails with bogus UTF-8 encoding error when multi-byte character in large CDATA section is split across buffer &lt;https://bugzilla.gnome.org/show_bug.cgi?id=760183&gt; (David Kilzer),<br/>
  Bug 758572: ASAN crash in make check &lt;https://bugzilla.gnome.org/show_bug.cgi?id=758572&gt; (David Kilzer),<br/>
  Bug 721158: Missing ICU string when doing --version on xmllint &lt;https://bugzilla.gnome.org/show_bug.cgi?id=721158&gt; (David Kilzer),<br/>
  python 3: libxml2.c wrappers create Unicode str already (Michael Stahl),<br/>
  Add autogen.sh to distrib (orzen),<br/>
  Heap-based buffer overread in xmlNextChar (Daniel Veillard)<br/>
  </li>

  <li>Improvements:<br/>
  Add more debugging info to runtest (Daniel Veillard),<br/>
  Implement "runtest -u" mode (David Kilzer),<br/>
  Add a make rule to rebuild for ASAN (Daniel Veillard)<br/>
  </li>
</ul>
<h3>v2.9.3: Nov 20 2015</h3>
<ul>
  <li>Security:<br/>
  CVE-2015-8242 Buffer overead with HTML parser in push mode (Hugh Davenport),<br/>
  CVE-2015-7500 Fix memory access error due to incorrect entities boundaries (Daniel Veillard),<br/>
  CVE-2015-7499-2 Detect incoherency on GROW (Daniel Veillard),<br/>
  CVE-2015-7499-1 Add xmlHaltParser() to stop the parser (Daniel Veillard),<br/>
  CVE-2015-5312 Another entity expansion issue (David Drysdale),<br/>
  CVE-2015-7497 Avoid an heap buffer overflow in xmlDictComputeFastQKey (David Drysdale),<br/>
  CVE-2015-7498 Avoid processing entities after encoding conversion failures (Daniel Veillard),<br/>
  CVE-2015-8035 Fix XZ compression support loop (Daniel Veillard),<br/>
  CVE-2015-7942-2 Fix an error in previous Conditional section patch (Daniel Veillard),<br/>
  CVE-2015-7942 Another variation of overflow in Conditional sections (Daniel Veillard),<br/>
  CVE-2015-1819 Enforce the reader to run in constant memory (Daniel Veillard)<br/>
  CVE-2015-7941_2 Cleanup conditional section error handling (Daniel Veillard),<br/>
  CVE-2015-7941_1 Stop parsing on entities boundaries errors (Daniel Veillard),<br/>
  </li>

  <li>Documentation:<br/>
  Correct spelling of "calling" (Alex Henrie),<br/>
  Fix a small error in xmllint --format description (Fabien Degomme),<br/>
  Avoid XSS on the search of xmlsoft.org (Daniel Veillard)<br/>
  </li>

  <li>Portability:<br/>
  threads: use forward declarations only for glibc (Michael Heimpold),<br/>
  Update Win32 configure.js to search for configure.ac (Daniel Veillard)<br/>
  </li>

  <li>Bug Fixes:<br/>
  Bug on creating new stream from entity (Daniel Veillard),<br/>
  Fix some loop issues embedding NEXT (Daniel Veillard),<br/>
  Do not print error context when there is none (Daniel Veillard),<br/>
  Avoid extra processing of MarkupDecl when EOF (Hugh Davenport),<br/>
  Fix parsing short unclosed comment uninitialized access (Daniel Veillard),<br/>
  Add missing Null check in xmlParseExternalEntityPrivate (Gaurav Gupta),<br/>
  Fix a bug in CData error handling in the push parser (Daniel Veillard),<br/>
  Fix a bug on name parsing at the end of current input buffer (Daniel Veillard),<br/>
  Fix the spurious ID already defined error (Daniel Veillard),<br/>
  Fix previous change to node sort order (Nick Wellnhofer),<br/>
  Fix a self assignment issue raised by clang (Scott Graham),<br/>
  Fail parsing early on if encoding conversion failed (Daniel Veillard),<br/>
  Do not process encoding values if the declaration if broken (Daniel Veillard),<br/>
  Silence clang's -Wunknown-attribute (Michael Catanzaro),<br/>
  xmlMemUsed is not thread-safe (Martin von Gagern),<br/>
  Fix support for except in nameclasses (Daniel Veillard),<br/>
  Fix order of root nodes (Nick Wellnhofer),<br/>
  Allow attributes on descendant-or-self axis (Nick Wellnhofer),<br/>
  Fix the fix to Windows locking (Steve Nairn),<br/>
  Fix timsort invariant loop re: Envisage article (Christopher Swenson),<br/>
  Don't add IDs in xmlSetTreeDoc (Nick Wellnhofer),<br/>
  Account for ID attributes in xmlSetTreeDoc (Nick Wellnhofer),<br/>
  Remove various unused value assignments (Philip Withnall),<br/>
  Fix missing entities after CVE-2014-3660 fix (Daniel Veillard),<br/>
  Revert "Missing initialization for the catalog module" (Daniel Veillard)<br/>
  </li>

  <li>Improvements:<br/>
  Reuse xmlHaltParser() where it makes sense (Daniel Veillard),<br/>
  xmlStopParser reset errNo (Daniel Veillard),<br/>
  Re-enable xz support by default (Daniel Veillard),<br/>
  Recover unescaped less-than character in HTML recovery parsing (Daniel Veillard),<br/>
  Allow HTML serializer to output HTML5 DOCTYPE (Shaun McCance),<br/>
  Regression test for bug #695699 (Nick Wellnhofer),<br/>
  Add a couple of XPath tests (Nick Wellnhofer),<br/>
  Add Python 3 rpm subpackage (Tomas Radej),<br/>
  libxml2-config.cmake.in: update include directories (Samuel Martin),<br/>
  Adding example from bugs 738805 to regression tests (Daniel Veillard)<br/>
  </li>

  <li>Cleanups:<br/>
  </li>
</ul>
<h3>2.9.2: Oct 16 2014</h3>
<ul>
  <li>Security:<br/>
  Fix for CVE-2014-3660 billion laugh variant (Daniel Veillard),<br/>
  CVE-2014-0191 Do not fetch external parameter entities (Daniel Veillard)<br/>
  </li>

  <li>Bug Fixes:<br/>
  fix memory leak xml header encoding field with XML_PARSE_IGNORE_ENC (Bart De Schuymer),<br/>
  xmlmemory: handle realloc properly (Yegor Yefremov),<br/>
  Python generator bug raised by the const change (Daniel Veillard),<br/>
  Windows Critical sections not released correctly (Daniel Veillard),<br/>
  Parser error on repeated recursive entity expansion containing &amp;lt; (Daniel Veillard),<br/>
  xpointer : fixing Null Pointers (Gaurav Gupta),<br/>
  Remove Unnecessary Null check in xpointer.c (Gaurav Gupta),<br/>
  parser bug on misformed namespace attributes (Dennis Filder),<br/>
  Pointer dereferenced before null check (Daniel Veillard),<br/>
  Leak of struct addrinfo in xmlNanoFTPConnect() (Gaurav Gupta),<br/>
  Possible overflow in HTMLParser.c (Daniel Veillard),<br/>
  python/tests/sync.py assumes Python dictionaries are ordered (John Beck),<br/>
  Fix Enum check and missing break (Gaurav Gupta),<br/>
  xmlIO: Handle error returns from dup() (Philip Withnall),<br/>
  Fix a problem properly saving URIs (Daniel Veillard),<br/>
  wrong error column in structured error when parsing attribute values (Juergen Keil),<br/>
  wrong error column in structured error when skipping whitespace in xml decl (Juergen Keil),<br/>
  no error column in structured error handler for xml schema validation errors (Juergen Keil),<br/>
  Couple of Missing Null checks (Gaurav Gupta),<br/>
  Add couple of missing Null checks (Daniel Veillard),<br/>
  xmlschemastypes: Fix potential array overflow (Philip Withnall),<br/>
  runtest: Fix a memory leak on parse failure (Philip Withnall),<br/>
  xmlIO: Fix an FD leak on gzdopen() failure (Philip Withnall),<br/>
  xmlcatalog: Fix a memory leak on quit (Philip Withnall),<br/>
  HTMLparser: Correctly initialise a stack allocated structure (Philip Withnall),<br/>
  Check for tmon in _xmlSchemaDateAdd() is incorrect (David Kilzer),<br/>
  Avoid Possible Null Pointer in trio.c (Gaurav Gupta),<br/>
  Fix processing in SAX2 in case of an allocation failure (Daniel Veillard),<br/>
  XML Shell command "cd" does not handle "/" at end of path (Daniel Veillard),<br/>
  Fix various Missing Null checks (Gaurav Gupta),<br/>
  Fix a potential NULL dereference (Daniel Veillard),<br/>
  Add a couple of misisng check in xmlRelaxNGCleanupTree (Gaurav Gupta),<br/>
  Add a missing argument check (Gaurav Gupta),<br/>
  Adding a check in case of allocation error (Gaurav Gupta),<br/>
  xmlSaveUri() incorrectly recomposes URIs with rootless paths (Dennis Filder),<br/>
  Adding some missing NULL checks (Gaurav),<br/>
  Fixes for xmlInitParserCtxt (Daniel Veillard),<br/>
  Fix regressions introduced by CVE-2014-0191 patch (Daniel Veillard),<br/>
  erroneously ignores a validation error if no error callback set (Daniel Veillard),<br/>
  xmllint was not parsing the --c14n11 flag (Sérgio Batista),<br/>
  Avoid Possible null pointer dereference in memory debug mode (Gaurav),<br/>
  Avoid Double Null Check (Gaurav),<br/>
  Restore context size and position after XPATH_OP_ARG (Nick Wellnhofer),<br/>
  Fix xmlParseInNodeContext() if node is not element (Daniel Veillard),<br/>
  Avoid a possible NULL pointer dereference (Gaurav),<br/>
  Fix xmlTextWriterWriteElement when a null content is given (Daniel Veillard),<br/>
  Fix an typo 'onrest' in htmlScriptAttributes (Daniel Veillard),<br/>
  fixing a ptotential uninitialized access (Daniel Veillard),<br/>
  Fix an fd leak in an error case (Daniel Veillard),<br/>
  Missing initialization for the catalog module (Daniel Veillard),<br/>
  Handling of XPath function arguments in error case (Nick Wellnhofer),<br/>
  Fix a couple of missing NULL checks (Gaurav),<br/>
  Avoid a possibility of dangling encoding handler (Gaurav),<br/>
  Fix HTML push parser to accept HTML_PARSE_NODEFDTD (Arnold Hendriks),<br/>
  Fix a bug loading some compressed files (Mike Alexander),<br/>
  Fix XPath node comparison bug (Gaurav),<br/>
  Type mismatch in xmlschemas.c (Gaurav),<br/>
  Type mismatch in xmlschemastypes.c (Gaurav),<br/>
  Avoid a deadcode in catalog.c (Daniel Veillard),<br/>
  run close socket on Solaris, same as we do on other platforms (Denis Pauk),<br/>
  Fix pointer dereferenced before null check (Gaurav),<br/>
  Fix a potential NULL dereference in tree code (Daniel Veillard),<br/>
  Fix potential NULL pointer dereferences in regexp code (Gaurav),<br/>
  xmllint --pretty crashed without following numeric argument (Tim Galeckas),<br/>
  Fix XPath expressions of the form '@ns:*' (Nick Wellnhofer),<br/>
  Fix XPath '//' optimization with predicates (Nick Wellnhofer),<br/>
  Clear up a potential NULL dereference (Daniel Veillard),<br/>
  Fix a possible NULL dereference (Gaurav),<br/>
  Avoid crash if allocation fails (Daniel Veillard),<br/>
  Remove occasional leading space in XPath number formatting (Daniel Veillard),<br/>
  Fix handling of mmap errors (Daniel Veillard),<br/>
  Catch malloc error and exit accordingly (Daniel Veillard),<br/>
  missing else in xlink.c (Ami Fischman),<br/>
  Fix a parsing bug on non-ascii element and CR/LF usage (Daniel Veillard),<br/>
  Fix a regression in xmlGetDocCompressMode() (Daniel Veillard),<br/>
  properly quote the namespace uris written out during c14n (Aleksey Sanin),<br/>
  Remove premature XInclude check on URI being relative (Alexey Neyman),<br/>
  Fix missing break on last() function for attributes (dcb),<br/>
  Do not URI escape in server side includes (Romain Bondue),<br/>
  Fix an error in xmlCleanupParser (Alexander Pastukhov)<br/>
  </li>

  <li>Documentation:<br/>
  typo in error messages "colon are forbidden from..." (Daniel Veillard),<br/>
  Fix a link to James SAX documentation old page (Daniel Veillard),<br/>
  Fix typos in relaxng.c (Jan Pokorný),<br/>
  Fix a doc typo (Daniel Veillard),<br/>
  Fix typos in {tree,xpath}.c (errror) (Jan Pokorný),<br/>
  Add limitations about encoding conversion (Daniel Veillard),<br/>
  Fix typos in xmlschemas{,types}.c (Jan Pokorný),<br/>
  Fix incorrect spelling entites-&gt;entities (Jan Pokorný),<br/>
  Forgot to document 2.9.1 release, regenerate docs (Daniel Veillard)<br/>
  </li>

  <li>Portability:<br/>
  AC_CONFIG_FILES and executable bit (Roumen Petrov),<br/>
  remove HAVE_CONFIG_H dependency in testlimits.c (Roumen Petrov),<br/>
  fix some tabs mixing incompatible with python3 (Roumen Petrov),<br/>
  Visual Studio 14 CTP defines snprintf() (Francis Dupont),<br/>
  OS400: do not try to copy unexisting doc files (Patrick Monnerat),<br/>
  OS400: use either configure.ac or configure.in. (Patrick Monnerat),<br/>
  os400: make-src.sh: create physical file with target CCSID (Patrick Monnerat),<br/>
  OS400: Add some more C macros equivalent procedures. (Patrick Monnerat),<br/>
  OS400: use C macros to implement equivalent RPG support procedures. (Patrick Monnerat),<br/>
  OS400: implement XPath macros as procedures for ILE/RPG support. (Patrick Monnerat),<br/>
  OS400: include in distribution tarball. (Patrick Monnerat),<br/>
  OS400: Add README: compilation directives and OS/400 specific stuff. (Patrick Monnerat),<br/>
  OS400: Add compilation scripts. (Patrick Monnerat),<br/>
  OS400: ILE RPG language header files. (Patrick Monnerat),<br/>
  OS400: implement some macros as functions for ILE/RPG language support (that as no macros). (Patrick Monnerat),<br/>
  OS400: UTF8&lt;--&gt;EBCDIC wrappers for system and external library calls (Patrick Monnerat),<br/>
  OS400: Easy character transcoding support (Patrick Monnerat),<br/>
  OS400: iconv functions compatibility wrappers and table builder. (Patrick Monnerat),<br/>
  OS400: create architecture directory. Implement dlfcn emulation. (Patrick Monnerat),<br/>
  Fix building when configuring without xpath and xptr (Daniel Veillard),<br/>
  configure: Add --with-python-install-dir (Jonas Eriksson),<br/>
  Fix compilation with minimum and xinclude. (Nicolas Le Cam),<br/>
  Compile out use of xmlValidateNCName() when not available. (Nicolas Le Cam),<br/>
  Fix compilation with minimum and schematron. (Nicolas Le Cam),<br/>
  Legacy needs xmlSAX2StartElement() and xmlSAX2EndElement(). (Nicolas Le Cam),<br/>
  Don't use xmlValidateName() when not available. (Nicolas Le Cam),<br/>
  Fix a portability issue on Windows (Longstreth Jon),<br/>
  Various portability patches for OpenVMS (Jacob (Jouk) Jansen),<br/>
  Use specific macros for portability to OS/400 (Patrick Monnerat),<br/>
  Add macros needed for OS/400 portability (Patrick Monnerat),<br/>
  Portability patch for fopen on OS/400 (Patrick Monnerat),<br/>
  Portability fixes for OS/400 (Patrick Monnerat),<br/>
  Improve va_list portability (Patrick Monnerat),<br/>
  Portability fix (Patrick Monnerat),<br/>
  Portability fix (Patrick Monnerat),<br/>
  Generic portability fix (Patrick Monnerat),<br/>
  Shortening lines in headers (Patrick Monnerat),<br/>
  build: Use pkg-config to find liblzma in preference to AC_CHECK_LIB (Philip Withnall),<br/>
  build: Add @LZMA_LIBS@ to libxml’s pkg-config files (Philip Withnall),<br/>
  fix some tabs mixing incompatible with python3 (Daniel Veillard),<br/>
  add additional defines checks for support "./configure --with-minimum" (Denis Pauk),<br/>
  Another round of fixes for older versions of Python (Arfrever Frehtes Taifersar Arahesis),<br/>
  python: fix drv_libxml2.py for python3 compatibility (Alexandre Rostovtsev),<br/>
  python: Fix compiler warnings when building python3 bindings (Armin K),<br/>
  Fix for compilation with python 2.6.8 (Petr Sumbera)<br/>
  </li>

  <li>Improvements:<br/>
  win32/libxml2.def.src after rebuild in doc (Roumen Petrov),<br/>
  elfgcchack.h: more legacy needs xmlSAX2StartElement() and xmlSAX2EndElement() (Roumen Petrov),<br/>
  elfgcchack.h: add xmlXPathNodeEval and xmlXPathSetContextNode (Roumen Petrov),<br/>
  Provide cmake module (Samuel Martin),<br/>
  Fix a couple of issues raised by make dist (Daniel Veillard),<br/>
  Fix and add const qualifiers (Kurt Roeckx),<br/>
  Preparing for upcoming release of 2.9.2 (Daniel Veillard),<br/>
  Fix zlib and lzma libraries check via command line (Dmitriy),<br/>
  wrong error column in structured error when parsing end tag (Juergen Keil),<br/>
  doc/news.html: small update to avoid line join while generating NEWS. (Patrick Monnerat),<br/>
  Add methods for python3 iterator (Ron Angeles),<br/>
  Support element node traversal in document fragments. (Kyle VanderBeek),<br/>
  xmlNodeSetName: Allow setting the name to a substring of the currently set name (Tristan Van Berkom),<br/>
  Added macros for argument casts (Eric Zurcher),<br/>
  adding init calls to xml and html Read parsing entry points (Daniel Veillard),<br/>
  Get rid of 'REPLACEMENT CHARACTER' Unicode chars in xmlschemas.c (Jan Pokorný),<br/>
  Implement choice for name classes on attributes (Shaun McCance),<br/>
  Two small namespace tweaks (Daniel Veillard),<br/>
  xmllint --memory should fail on empty files (Daniel Veillard),<br/>
  Cast encoding name to char pointer to match arg type (Nikolay Sivov)<br/>
  </li>

  <li>Cleanups:<br/>
  Removal of old configure.in (Daniel Veillard),<br/>
  Unreachable code in tree.c (Gaurav Gupta),<br/>
  Remove a couple of dead conditions (Gaurav Gupta),<br/>
  Avoid some dead code and cleanup in relaxng.c (Gaurav),<br/>
  Drop not needed checks (Denis Pauk),<br/>
  Fix a wrong test (Daniel Veillard)<br/>
  </li>
</ul>
<h3>2.9.1: Apr 19 2013</h3>
<ul>
  <li> Features:<br/>
    Support for Python3 (Daniel Veillard),<br/>
    Add xmlXPathSetContextNode and xmlXPathNodeEval (Alex Bligh)<br/>
  </li>

  <li> Documentation:<br/>
    Add documentation for xmllint --xpath (Daniel Veillard),<br/>
    Fix the URL of the SAX documentation from James (Daniel Veillard),<br/>
    Fix spelling of "length". (Michael Wood)<br/>
  </li>

  <li> Portability:<br/>
    Fix python bindings with versions older than 2.7 (Daniel Veillard),<br/>
    rebuild docs:Makefile.am (Roumen Petrov),<br/>
    elfgcchack.h after rebuild in doc (Roumen Petrov),<br/>
    elfgcchack for buf module (Roumen Petrov),<br/>
    Fix a uneeded and wrong extra link parameter (Daniel Veillard),<br/>
    Few cleanup patches for Windows (Denis Pauk),<br/>
    Fix rpmbuild --nocheck (Mark Salter),<br/>
    Fix for win32/configure.js and WITH_THREAD_ALLOC (Daniel Richard),<br/>
    Fix Broken multi-arch support in xml2-config (Daniel Veillard),<br/>
    Fix a portability issue for GCC &lt; 3.4.0 (Daniel Veillard),<br/>
    Windows build fixes (Daniel Richard),<br/>
    Fix a thread portability problem (Friedrich Haubensak),<br/>
    Downgrade autoconf requirement to 2.63 (Daniel Veillard)<br/>
  </li>

  <li> Bug Fixes:<br/>
    Fix a linking error for python bindings (Daniel Veillard),<br/>
    Fix a couple of return without value (Jüri Aedla),<br/>
    Improve the hashing functions (Daniel Franke),<br/>
    Improve handling of xmlStopParser() (Daniel Veillard),<br/>
    Remove risk of lockup in dictionary initialization (Daniel Veillard),<br/>
    Activate detection of encoding in external subset (Daniel Veillard),<br/>
    Fix an output buffer flushing conversion bug (Mikhail Titov),<br/>
    Fix an old bug in xmlSchemaValidateOneElement (Csaba László),<br/>
    Fix configure cannot remove messages (Gilles Espinasse),<br/>
    fix schema validation in combination with xsi:nil (Daniel Veillard),<br/>
    xmlCtxtReadFile doesn't work with literal IPv6 URLs (Steve Wolf),<br/>
    Fix a few problems with setEntityLoader (Alexey Neyman),<br/>
    Detect excessive entities expansion upon replacement (Daniel Veillard),<br/>
    Fix the flushing out of raw buffers on encoding conversions (Daniel,<br/>
Veillard),<br/>
    Fix some buffer conversion issues (Daniel Veillard),<br/>
    When calling xmlNodeDump make sure we grow the buffer quickly (Daniel,<br/>
Veillard),<br/>
    Fix an error in the progressive DTD parsing code (Dan Winship),<br/>
    xmllint should not load DTD by default when using the reader (Daniel,<br/>
Veillard),<br/>
    Try IBM-037 when looking for EBCDIC handlers (Petr Sumbera),<br/>
    Fix potential out of bound access (Daniel Veillard),<br/>
    Fix large parse of file from memory (Daniel Veillard),<br/>
    Fix a bug in the nsclean option of the parser (Daniel Veillard),<br/>
    Fix a regression in 2.9.0 breaking validation while streaming (Daniel,<br/>
Veillard),<br/>
    Remove potential calls to exit() (Daniel Veillard)<br/>
  </li>

  <li> Improvements:<br/>
    Regenerated API, and testapi, rebuild documentation (Daniel Veillard),<br/>
    Fix tree iterators broken by 2to3 script (Daniel Veillard),<br/>
    update all tests for Python3 and Python2 (Daniel Veillard),<br/>
    A few more fixes for python 3 affecting libxml2.py (Daniel Veillard),<br/>
    Fix compilation on Python3 (Daniel Veillard),<br/>
    Converting apibuild.py to python3 (Daniel Veillard),<br/>
    First pass at starting porting to python3 (Daniel Veillard),<br/>
    updated configure.in for python3 (Daniel Veillard),<br/>
    Add support for xpathRegisterVariable in Python (Shaun McCance),<br/>
    Added a regression tests from bug 694228 data (Daniel Veillard),<br/>
    Cache presence of '&lt;' in entities content (Daniel Veillard),<br/>
    Avoid extra processing on entities (Daniel Veillard),<br/>
    Python binding for xmlRegisterInputCallback (Alexey Neyman),<br/>
    Python bindings: DOM casts everything to xmlNode (Alexey Neyman),<br/>
    Define LIBXML_THREAD_ALLOC_ENABLED via xmlversion.h (Tim Starling),<br/>
    Adding streaming validation to runtest checks (Daniel Veillard),<br/>
    Add a --pushsmall option to xmllint (Daniel Veillard)<br/>
  </li>

  <li> Cleanups:<br/>
    Switched comment in file to UTF-8 encoding (Daniel Veillard),<br/>
    Extend gitignore (Daniel Veillard),<br/>
    Silent the new python test on input (Alexey Neyman),<br/>
    Cleanup of a duplicate test (Daniel Veillard),<br/>
    Cleanup on duplicate test expressions (Daniel Veillard),<br/>
    Fix compiler warning after 153cf15905cf4ec080612ada6703757d10caba1e (Patrick,<br/>
Gansterer),<br/>
    Spec cleanups and a fix for multiarch support (Daniel Veillard),<br/>
    Silence a clang warning (Daniel Veillard),<br/>
    Cleanup the Copyright to be pure MIT Licence wording (Daniel Veillard),<br/>
    rand_seed should be static in dict.c (Wouter Van Rooy),<br/>
    Fix typos in parser comments (Jan Pokorný)<br/>
  </li>
</ul>
<h3>2.9.0: Sep 11 2012</h3>
<ul>
  <li> Features:<br/>
    A few new API entry points,<br/>
    More resilient push parser mode,<br/>
    A lot of portability improvement,<br/>
    Faster XPath evaluation<br/>
  </li>

  <li> Documentation:<br/>
    xml2-config.1 markup error (Christian Weisgerber),<br/>
    libxml(3) manpage typo fix (John Bradshaw),<br/>
    More cleanups to the documentation part of libxml2 (Daniel Richard G)<br/>
  </li>

  <li> Portability:<br/>
    Bug 676544 - fails to build with --without-sax1 (Akira TAGOH),<br/>
    fix builds not having stdint.h (Rob Richards),<br/>
    GetProcAddressA is available only on WinCE (Daniel Veillard),<br/>
    More updates and cleanups on autotools and Makefiles (Daniel Richard G),<br/>
    More changes for Win32 compilation (Eric Zurcher),<br/>
    Basic changes for Win32 builds of release 2.9.0: compile buf.c (Eric Zurcher),<br/>
    Bundles all generated files for python into the distribution (Daniel Richard G),<br/>
    Fix compiler warnings of wincecompat.c (Patrick Gansterer),<br/>
    Fix non __GNUC__ build (Patrick Gansterer),<br/>
    Fix windows unicode build (Patrick Gansterer),<br/>
    clean redefinition of {v}snprintf in C-source (Roumen Petrov),<br/>
    use xmlBuf... if DEBUG_INPUT is defined (Roumen Petrov),<br/>
    fix runtests to use pthreads support for various Unix platforms (Daniel Richard G),<br/>
    Various "make distcheck" and portability fixups 2nd part (Daniel Richard G),<br/>
    Various "make distcheck" and portability fixups (Daniel Richard G),<br/>
    Fix compilation on older Visual Studio (Daniel Veillard)<br/>
  </li>

  <li> Bug Fixes:<br/>
    Change the XPath code to percolate allocation errors (Daniel Veillard),<br/>
    Fix reuse of xmlInitParser (Daniel Veillard),<br/>
    Fix potential crash on entities errors (Daniel Veillard),<br/>
    initialize var (Rob Richards),<br/>
    Fix the XPath arity check to also check the XPath stack limits (Daniel Veillard),<br/>
    Fix problem with specific and generic error handlers (Pietro Cerutti),<br/>
    Avoid a potential infinite recursion (Daniel Veillard),<br/>
    Fix an XSD error when generating internal automata (Daniel Veillard),<br/>
    Patch for xinclude of text using multibyte characters (Vitaly Ostanin),<br/>
    Fix a segfault on XSD validation on pattern error (Daniel Veillard),<br/>
    Fix missing xmlsave.h module which was ignored in recent builds (Daniel Veillard),<br/>
    Add a missing element check (Daniel Veillard),<br/>
    Adding various checks on node type though the API (Daniel Veillard),<br/>
    Namespace nodes can't be unlinked with xmlUnlinkNode (Daniel Veillard),<br/>
    Fix make dist to include new private header files (Daniel Veillard),<br/>
    More fixups on the push parser behaviour (Daniel Veillard),<br/>
    Strengthen behaviour of the push parser in problematic situations (Daniel Veillard),<br/>
    Enforce XML_PARSER_EOF state handling through the parser (Daniel Veillard),<br/>
    Fixup limits parser (Daniel Veillard),<br/>
    Do not fetch external parsed entities (Daniel Veillard),<br/>
    Fix an error in previous commit (Aron Xu),<br/>
    Fix entities local buffers size problems (Daniel Veillard),<br/>
    Fix parser local buffers size problems (Daniel Veillard),<br/>
    Fix a failure to report xmlreader parsing failures (Daniel Veillard)<br/>
  </li>

  <li> Improvements:<br/>
    Keep libxml2.syms when running "make distclean" (Daniel Veillard),<br/>
    Allow to set the quoting character of an xmlWriter (Csaba Raduly),<br/>
    Keep non-significant blanks node in HTML parser (Daniel Veillard),<br/>
    Add a forbidden variable error number and message to XPath (Daniel Veillard),<br/>
    Support long path names on WNT (Michael Stahl),<br/>
    Improve HTML escaping of attribute on output (Daniel Veillard),<br/>
    Handle ICU_LIBS as LIBADD, not LDFLAGS to prevent linking errors (Arfrever Frehtes Taifersar Arahesis),<br/>
    Switching XPath node sorting to Timsort (Vojtech Fried),<br/>
    Optimizing '//' in XPath expressions (Nick Wellnhofer),<br/>
    Expose xmlBufShrink in the public tree API (Daniel Veillard),<br/>
    Visible HTML elements close the head tag (Conrad Irwin),<br/>
    Fix file and line report for XSD SAX and reader streaming validation (Daniel Veillard),<br/>
    Fix const qualifyer to definition of xmlBufferDetach (Daniel Veillard),<br/>
    minimize use of HAVE_CONFIG_H (Roumen Petrov),<br/>
    fixup regression in Various "make distcheck" and portability fixups (Roumen Petrov),<br/>
    Add support for big line numbers in error reporting (Daniel Veillard),<br/>
    Avoid using xmlBuffer for serialization (Daniel Veillard),<br/>
    Improve compatibility between xmlBuf and xmlBuffer (Daniel Veillard),<br/>
    Provide new accessors for xmlOutputBuffer (Daniel Veillard),<br/>
    Improvements for old buffer compatibility (Daniel Veillard),<br/>
    Expand the limit test program (Daniel Veillard),<br/>
    Improve error reporting on parser errors (Daniel Veillard),<br/>
    Implement some default limits in the XPath module (Daniel Veillard),<br/>
    Introduce some default parser limits (Daniel Veillard),<br/>
    Cleanups and new limit APIs for dictionaries (Daniel Veillard),<br/>
    Fixup for buf.c (Daniel Veillard),<br/>
    Cleanup URI module memory allocation code (Daniel Veillard),<br/>
    Extend testlimits (Daniel Veillard),<br/>
    More avoid quadratic behaviour (Daniel Veillard),<br/>
    Impose a reasonable limit on PI size (Daniel Veillard),<br/>
    first version of testlimits new test (Daniel Veillard),<br/>
    Avoid quadratic behaviour in some push parsing cases (Daniel Veillard),<br/>
    Impose a reasonable limit on comment size (Daniel Veillard),<br/>
    Impose a reasonable limit on attribute size (Daniel Veillard),<br/>
    Harden the buffer code and make it more compatible (Daniel Veillard),<br/>
    More cleanups for input/buffers code (Daniel Veillard),<br/>
    Cleanup function xmlBufResetInput(),<br/> to set input from Buffer (Daniel Veillard)
    Switch the test program for characters to new input buffers (Daniel Veillard),<br/>
    Convert the HTML tree module to the new buffers (Daniel Veillard),<br/>
    Convert of the HTML parser to new input buffers (Daniel Veillard),<br/>
    Convert the writer to new output buffer and save APIs (Daniel Veillard),<br/>
    Convert XMLReader to the new input buffers (Daniel Veillard),<br/>
    New saving functions using xmlBuf and conversion (Daniel Veillard),<br/>
    Provide new xmlBuf based saving functions (Daniel Veillard),<br/>
    Convert XInclude to the new input buffers (Daniel Veillard),<br/>
    Convert catalog code to the new input buffers (Daniel Veillard),<br/>
    Convert C14N to the new Input buffer (Daniel Veillard),<br/>
    Convert xmlIO.c to the new input and output buffers (Daniel Veillard),<br/>
    Convert XML parser to the new input buffers (Daniel Veillard),<br/>
    Incompatible change to the Input and Output buffers (Daniel Veillard),<br/>
    Adding new encoding function to deal with the new structures (Daniel Veillard),<br/>
    Convert XPath to xmlBuf (Daniel Veillard),<br/>
    Adding a new buf module for buffers (Daniel Veillard),<br/>
    Memory error within SAX2 reuse common framework (Daniel Veillard),<br/>
    Fix xmllint --xpath node initialization (Daniel Veillard)<br/>
  </li>

  <li> Cleanups:<br/>
    Various cleanups to avoid compiler warnings (Daniel Veillard),<br/>
    Big space and tab cleanup (Daniel Veillard),<br/>
    Followup to LibXML2 docs/examples cleanup patch (Daniel Veillard),<br/>
    Second round of cleanups for LibXML2 docs/examples (Daniel Richard),<br/>
    Remove all .cvsignore as they are not used anymore (Daniel Veillard),<br/>
    Fix a Timsort function helper comment (Daniel Veillard),<br/>
    Small cleanup for valgrind target (Daniel Veillard),<br/>
    Patch for portability of latin characters in C files (Daniel Veillard),<br/>
    Cleanup some of the parser code (Daniel Veillard),<br/>
    Fix a variable name in comment (Daniel Veillard),<br/>
    Regenerated testapi.c (Daniel Veillard),<br/>
    Regenerating docs and API files (Daniel Veillard),<br/>
    Small cleanup of unused variables in test (Daniel Veillard),<br/>
    Expand .gitignore with more files (Daniel Veillard)<br/>
  </li>
</ul>
<h3>2.8.0: May 23 2012</h3>
<ul>
  <li>Features:
  add lzma compression support (Anders F Bjorklund)
  </li>

  <li>Documentation:
    xmlcatalog: Add uri and delegateURI to possible add types in man page. (Ville Skyttä),
    Update README.tests (Daniel Veillard),
    URI handling code is not OOM resilient (Daniel Veillard),
    Fix an error in comment (Daniel Veillard),
    Fixed bug #617016 (Daniel Mustieles),
    Fixed two typos in the README document (Daniel Neel),
    add generated html files (Anders F Bjorklund),
    Clarify the need to use xmlFreeNode after xmlUnlinkNode (Daniel Veillard),
    Improve documentation a bit (Daniel Veillard),
    Updated URL for lxml python bindings (Daniel Veillard)
  </li>

  <li>Portability:
    Restore code for Windows compilation (Daniel Veillard),
    Remove git error message during configure (Christian Dywan),
    xmllint: Build fix for endTimer if !defined(HAVE_GETTIMEOFDAY) (Patrick R. Gansterer),
    remove a bashism in confgure.in (John Hein),
    undef ERROR if already defined (Patrick R. Gansterer),
    Fix library problems with mingw-w64 (Michael Cronenworth),
    fix windows build. ifdef addition from bug 666491 makes no sense (Rob Richards),
    prefer native threads on win32 (Sam Thursfield),
    Allow to compile with Visual Studio 2010 (Thomas Lemm),
    Fix mingw's snprintf configure check (Andoni Morales),
    fixed a 64bit big endian issue (Marcus Meissner),
    Fix portability failure if netdb.h lacks NO_ADDRESS (Daniel Veillard),
    Fix windows build from lzma addition (Rob Richards),
    autogen: Only check for libtoolize (Colin Walters),
    Fix the Windows build files (Patrick von Reth),
    634846 Remove a linking option breaking Windows VC10 (Daniel Veillard),
    599241 fix an initialization problem on Win64 (Andrew W. Nosenko),
    fix win build (Rob Richards)
  </li>

  <li>Bug fixes:
    Part for rand_r checking missing (Daniel Veillard),
    Cleanup on randomization (Daniel Veillard),
    Fix undefined reference in python module (Pacho Ramos),
    Fix a race in xmlNewInputStream (Daniel Veillard),
    Fix weird streaming RelaxNG errors (Noam),
    Fix various bugs in new code raised by the API checking (Daniel Veillard),
    Fix various problems with "make dist" (Daniel Veillard),
    Fix a memory leak in the xzlib code (Daniel Veillard),
    HTML parser error with &lt;noscript&gt; in the &lt;head&gt; (Denis Pauk),
    XSD: optional element in complex type extension (Remi Gacogne),
    Fix html serialization error and htmlSetMetaEncoding() (Daniel Veillard),
    Fix a wrong return value in previous patch (Daniel Veillard),
    Fix an uninitialized variable use (Daniel Veillard),
    Fix a compilation problem with --minimum (Brandon Slack),
    Remove redundant and ungarded include of resolv.h (Daniel Veillard),
    xinclude with parse="text" does not use the entity loader (Shaun McCance),
    Allow to parse 1 byte HTML files (Denis Pauk),
    Patch that fixes the skipping of the HTML_PARSE_NOIMPLIED flag (Martin Schröder),
    Avoid memory leak if xmlParserInputBufferCreateIO fails (Lin Yi-Li),
    Prevent an infinite loop when dumping a node with encoding problems (Timothy Elliott),
    xmlParseNodeInContext problems with an empty document (Tim Elliott),
    HTML element position is not detected properly (Pavel Andrejs),
    Fix an off by one pointer access (Jüri Aedla),
    Try to fix a problem with entities in SAX mode (Daniel Veillard),
    Fix a crash with xmllint --path on empty results (Daniel Veillard),
    Fixed bug #667946 (Daniel Mustieles),
    Fix a logic error in Schemas Component Constraints (Ryan Sleevi),
    Fix a wrong enum type use in Schemas Types (Nico Weber),
    Fix SAX2 builder in case of undefined attributes namespace (Daniel Veillard),
    Fix SAX2 builder in case of undefined element namespaces (Daniel Veillard),
    fix reference to STDOUT_FILENO on MSVC (Tay Ray Chuan),
    fix a pair of possible out of array char references (Daniel Veillard),
    Fix an allocation error when copying entities (Daniel Veillard),
    Make sure the parser returns when getting a Stop order (Chris Evans),
    Fix some potential problems on reallocation failures(parser.c) (Xia Xinfeng),
    Fix a schema type duration comparison overflow (Daniel Veillard),
    Fix an unimplemented part in RNG value validation (Daniel Veillard),
    Fix missing error status in XPath evaluation (Daniel Veillard),
    Hardening of XPath evaluation (Daniel Veillard),
    Fix an off by one error in encoding (Daniel Veillard),
    Fix RELAX NG include bug #655288 (Shaun McCance),
    Fix XSD validation bug #630130 (Toyoda Eizi),
    Fix some potential problems on reallocation failures (Chris Evans),
    __xmlRaiseError: fix use of the structured callback channel (Dmitry V. Levin),
    __xmlRaiseError: fix the structured callback channel's data initialization (Dmitry V. Levin),
    Fix memory corruption when xmlParseBalancedChunkMemoryInternal is called from xmlParseBalancedChunk (Rob Richards),
    Small fix for previous commit (Daniel Veillard),
    Fix a potential freeing error in XPath (Daniel Veillard),
    Fix a potential memory access error (Daniel Veillard),
    Reactivate the shared library versioning script (Daniel Veillard)
  </li>

  <li>Improvements:
    use mingw C99 compatible functions {v}snprintf instead those from MSVC runtime (Roumen Petrov),
    New symbols added for the next release (Daniel Veillard),
    xmlTextReader bails too quickly on error (Andy Lutomirski),
    Use a hybrid allocation scheme in xmlNodeSetContent (Conrad Irwin),
    Use buffers when constructing string node lists. (Conrad Irwin),
    Add HTML parser support for HTML5 meta charset encoding declaration (Denis Pauk),
    wrong message for double hyphen in comment XML error (Bryan Henderson),
    Fix "make tst" to grab lzma lib too (Daniel Veillard),
    Add "whereis" command to xmllint shell (Ryan),
    Improve xmllint shell (Ryan),
    add function xmlTextReaderRelaxNGValidateCtxt() (Noam Postavsky),
    Add --system support to autogen.sh (Daniel Veillard),
    Add hash randomization to hash and dict structures (Daniel Veillard),
    included xzlib in dist (Anders F Bjorklund),
    move xz/lzma helpers to separate included files (Anders F Bjorklund),
    add generated devhelp files (Anders F Bjorklund),
    add XML_WITH_LZMA to api (Anders F Bjorklund),
    autogen.sh: Honor NOCONFIGURE environment variable (Colin Walters),
    Improve the error report on undefined REFs (Daniel Veillard),
    Add exception for new W3C PI xml-model (Daniel Veillard),
    Add options to ignore the internal encoding (Daniel Veillard),
    testapi: use the right type for the check (Stefan Kost),
    various: handle return values of write calls (Stefan Kost),
    testWriter: xmlTextWriterWriteFormatElement wants an int instead of a long int (Stefan Kost),
    runxmlconf: update to latest testsuite version (Stefan Kost),
    configure: add -Wno-long-long to CFLAGS (Stefan Kost),
    configure: support silent automake rules if possible (Stefan Kost),
    xmlmemory: add a cast as size_t has no portable printf modifier (Stefan Kost),
    __xmlRaiseError: remove redundant schannel initialization (Dmitry V. Levin),
    __xmlRaiseError: do cheap code check early (Dmitry V. Levin)
  </li>

  <li>Cleanups:
    Cleanups before 2.8.0-rc2 (Daniel Veillard),
    Avoid an extra operation (Daniel Veillard),
    Remove vestigial de-ANSI-fication support. (Javier Jardón),
    autogen.sh: Fix typo (Javier Jardón),
    Do not use unsigned but unsigned int (Daniel Veillard),
    Remove two references to u_short (Daniel Veillard),
    Fix -Wempty-body warning from clang (Nico Weber),
    Cleanups of lzma support (Daniel Veillard),
    Augment the list of ignored files (Daniel Veillard),
    python: remove unused variable (Stefan Kost),
    python: flag two unused args (Stefan Kost),
    configure: acconfig.h is deprecated since autoconf-2.50 (Stefan Kost),
    xpath: remove unused variable (Stefan Kost)
  </li>
</ul>
<h3>2.7.8: Nov 4 2010</h3>
<ul>
  <li> Features:
    480323 add code to plug in ICU converters by default (Giuseppe Iuculano),
    Add xmlSaveOption XML_SAVE_WSNONSIG (Adam Spragg)
  </li>
  <li> Documentation:
    Fix devhelp documentation installation (Mike Hommey),
    Fix web site encoding problems (Daniel Veillard),
    Fix a couple of typo in HTML parser error messages (Michael Day),
    Forgot to update the news page for 0.7.7 (Daniel Veillard)
  </li>
  <li> Portability:
    607273 Fix python detection on MSys/Windows (LRN),
    614087 Fix Socket API usage to allow Windows64 compilation (Ozkan Sezer),
    Fix compilation with Clang (Koop Mast),
    Fix Win32 build (Rob Richards)
  </li>
  <li> Bug Fixes:
    595789 fix a remaining potential Solaris problem (Daniel Veillard),
    617468 fix progressive HTML parsing with style using "'" (Denis Pauk),
    616478 Fix xmllint shell write command (Gwenn Kahz),
    614005 Possible erroneous HTML parsing on unterminated script (Pierre Belzile),
    627987 Fix XSD IDC errors in imported schemas (Jim Panetta),
    629325 XPath rounding errors first cleanup (Phil Shafer),
    630140 fix iso995x encoding error (Daniel Veillard),
    make sure htmlCtxtReset do reset the disableSAX field (Daniel Veillard),
    Fix a change of semantic on XPath preceding and following axis (Daniel Veillard),
    Fix a potential segfault due to weak symbols on pthreads (Mike Hommey),
    Fix a leak in XPath compilation (Daniel Veillard),
    Fix the semantic of XPath axis for namespace/attribute context nodes (Daniel Veillard),
    Avoid a descriptor leak in catalog loading code (Carlo Bramini),
    Fix a small bug in XPath evaluation code (Marius Wachtler),
    Fix handling of XML-1.0 XML namespace declaration (Daniel Veillard),
    Fix errors in XSD double validation check (Csaba Raduly),
    Fix handling of apos in URIs (Daniel Veillard),
    xmlTextReaderReadOuterXml should handle DTD (Rob Richards),
    Autogen.sh needs to create m4 directory (Rob Richards)
  </li>
  <li> Improvements:
    606592 update language ID parser to RFC 5646 (Daniel Veillard),
    Sort python generated stubs (Mike Hommey),
    Add an HTML parser option to avoid a default doctype (Daniel Veillard)
  </li>
  <li> Cleanups:
    618831 don't ship generated files in git (Adrian Bunk),
    Switch from the obsolete mkinstalldirs to AC_PROG_MKDIR_P (Adrian Bunk),
    Various cleanups on encoding handling (Daniel Veillard),
    Fix xmllint to use format=1 for default formatting (Adam Spragg),
    Force _xmlSaveCtxt.format to be 0 or 1 (Adam Spragg),
    Cleanup encoding pointer comparison (Nikolay Sivov),
    Small code cleanup on previous patch (Daniel Veillard)
  </li>
</ul>
<h3>2.7.7: Mar 15 2010</h3>
<ul>
  <li> Improvements:
    Adding a --xpath option to xmllint (Daniel Veillard),
    Make HTML parser non-recursive (Eugene Pimenov)
  </li>
  <li> Portability:
    relaxng.c: cast to allow compilation with sun studio 11 (Ben Walton),
    Fix build failure on Sparc solaris (Roumen Petrov),
    use autoreconf in autogen.sh (Daniel Veillard),
    Fix build with mingw (Roumen Petrov),
    Upgrade some of the configure and autogen (Daniel Veillard),
    Fix relaxNG tests in runtest for Windows runtest.c: initialize ret (Rob Richards),
    Fix a const warning in xmlNodeSetBase (Martin Trappel),
    Fix python generator to not use deprecated xmllib (Daniel Veillard),
    Update some automake files (Daniel Veillard),
    598785 Fix nanohttp on Windows (spadix)
  </li>
  <li> Bug Fixes:
    libxml violates the zlib interface and crashes (Mark Adler),
    Fix broken escape behaviour in regexp ranges (Daniel Veillard),
    Fix  missing win32 libraries in libxml-2.0.pc (Volker Grabsch),
    Fix detection of python linker flags (Daniel Macks),
    fix build error in libxml2/python (Paul Smith),
    ChunkParser: Incorrect decoding of small xml files (Raul Hudea),
    htmlCheckEncoding doesn't update input-end after shrink (Eugene Pimenov),
    Fix a missing #ifdef (Daniel Veillard),
    Fix encoding selection for xmlParseInNodeContext (Daniel Veillard),
    xmlPreviousElementSibling mistake (FranÃ§ois Delyon),
    608773 add a missing check in xmlGROW (Daniel Veillard),
    Fix xmlParseInNodeContext for HTML content (Daniel Veillard),
    Fix lost namespace when copying node * tree.c: reconcile namespace if not found (Rob Richards),
    Fix some missing commas in HTML element lists (Eugene Pimenov),
    Correct variable type to unsigned (Nikolay Sivov),
    Recognize ID attribute in HTML without DOCTYPE (Daniel Veillard),
    Fix memory leak in xmlXPathEvalExpression() (Martin),
    Fix an init bug in global.c (Kai Henning),
    Fix xmlNodeSetBase() comment (Daniel Veillard),
    Fix broken escape behaviour in regexp ranges (Daniel Veillard),
    Don't give default HTML boolean attribute values in parser (Daniel Veillard),
    xmlCtxtResetLastError should reset ctxt-errNo (Daniel Veillard)
  </li>
  <li> Cleanups:
    Cleanup a couple of weirdness in HTML parser (Eugene Pimenov)
  </li>
</ul>
<h3>2.7.6: Oct  6 2009</h3>
<ul>
  <li> Bug Fixes:
     Restore thread support in default configuration (Andrew W. Nosenko),
     URI with no path parsing problem (Daniel Veillard),
     Minor patch for conditional defines in threads.c (Eric Zurcher)
  </li>
</ul>
<h3>2.7.5: Sep 24 2009</h3>
<ul>
  <li> Bug Fixes:
    Restore behavior of --with-threads without argument (Andrew W. Nosenko),
    Fix memory leak when doc is NULL (Rob Richards),
    595792 fixing a RelaxNG bug introduced in 2.7.4 (Daniel Veillard),
    Fix a Relaxng bug raised by libvirt test suite (Daniel Veillard),
    Fix a parsing problem with little data at startup (Daniel Veillard),
    link python module with python library (Frederic Crozat),
    594874 Forgot an fclose in xmllint (Daniel Veillard)
  </li>
  <li> Cleanup:
    Adding symbols.xml to EXTRA_DIST (Daniel Veillard)
  </li>
</ul>
<h3>2.7.4: Sep 10 2009</h3>
<ul>
  <li>Improvements:
    Switch to GIT (GNOME),
    Add symbol versioning to libxml2 shared libs (Daniel Veillard)
  </li>
  <li>Portability:
    593857 try to work around thread pbm MinGW 4.4 (Daniel Veillard),
    594250 rename ATTRIBUTE_ALLOC_SIZE to avoid clashes (Daniel Veillard),
    Fix Windows build * relaxng.c: fix windows build (Rob Richards),
    Fix the globals.h to use XMLPUBFUN (Paul Smith),
    Problem with extern extern in header (Daniel Veillard),
    Add -lnetwork for compiling on Haiku (Scott McCreary),
    Runtest portability patch for Solaris (Tim Rice),
    Small patch to accommodate the Haiku OS (Scott McCreary),
    584605 package VxWorks folder in the distribution (Daniel Veillard),
    574017 Realloc too expensive on most platform (Daniel Veillard),
    Fix windows build (Rob Richards),
    545579 doesn't compile without schema support (Daniel Veillard),
    xmllint use xmlGetNodePath when not compiled in (Daniel Veillard),
    Try to avoid __imp__xmlFree link trouble on msys (Daniel Veillard),
    Allow to select the threading system on Windows (LRN),
    Fix Solaris binary links, cleanups (Daniel Veillard),
    Bug 571059 â MSVC doesn't work with the bakefile (Intron),
    fix ATTRIBUTE_PRINTF header clash (Belgabor and Mike Hommey),
    fixes for Borland/CodeGear/Embarcadero compilers (Eric Zurcher)
  </li>
  <li>Documentation:
    544910 typo: "renciliateNs" (Leonid Evdokimov),
    Add VxWorks to list of OSes (Daniel Veillard),
    Regenerate the documentation and update for git (Daniel Veillard),
    560524 Â¿ xmlTextReaderLocalName description (Daniel Veillard),
    Added sponsoring by AOE media for the server (Daniel Veillard),
    updated URLs for GNOME (Vincent Lefevre),
    more warnings about xmlCleanupThreads and xmlCleanupParser (Daniel Veillard)
  </li>
  <li>Bug fixes:
    594514 memory leaks - duplicate initialization (MOD),
    Wrong block opening in htmlNodeDumpOutputInternal (Daniel Veillard),
    492317 Fix  Relax-NG validation problems (Daniel Veillard),
    558452 fight with reg test and error report (Daniel Veillard),
    558452 RNG compilation of optional multiple child (Daniel Veillard),
    579746 XSD validation not correct / nilable groups (Daniel Veillard),
    502960 provide namespace stack when parsing entity (Daniel Veillard),
    566012 part 2 fix regression tests and push mode (Daniel Veillard),
    566012 autodetected encoding and encoding conflict (Daniel Veillard),
    584220 xpointer(/) and xinclude problems (Daniel Veillard),
    587663 Incorrect Attribute-Value Normalization (Daniel Veillard),
    444994 HTML chunked failure for attribute with &lt;&gt; (Daniel Veillard),
    Fix end of buffer char being split in XML parser (Daniel Veillard),
    Non ASCII character may be split at buffer end (Adiel Mittmann),
    440226 Add xmlXIncludeProcessTreeFlagsData API (Stefan Behnel),
    572129 speed up parsing of large HTML text nodes (Markus Kull),
    Fix HTML parsing with 0 character in CDATA (Daniel Veillard),
    Fix SetGenericErrorFunc and SetStructured clash (Wang Lam),
    566012  Incomplete EBCDIC parsing support (Martin Kogler),
    541335 HTML avoid creating 2 head or 2 body element (Daniel Veillard),
    541237 error correcting missing end tags in HTML (Daniel Veillard),
    583439 missing line numbers in push mode (Daniel Veillard),
    587867 xmllint --html --xmlout serializing as HTML (Daniel Veillard),
    559501 avoid select and use poll for nanohttp (Raphael Prevost),
    559410 -  Regexp bug on (...)? constructs (Daniel Veillard),
    Fix a small problem on previous HTML parser patch (Daniel Veillard),
    592430 -  HTML parser runs into endless loop (Daniel Veillard),
    447899 potential double free in xmlFreeTextReader (Daniel Veillard),
    446613 small validation bug mixed content with NS (Daniel Veillard),
    Fix the problem of revalidating a doc with RNG (Daniel Veillard),
    Fix xmlKeepBlanksDefault to not break indent (Nick Wellnhofer),
    512131 refs from externalRef part need to be added (Daniel Veillard),
    512131 crash in xmlRelaxNGValidateFullElement (Daniel Veillard),
    588441 allow '.' in HTML Names even if invalid (Daniel Veillard),
    582913 Fix htmlSetMetaEncoding() to be nicer (Daniel Veillard),
    579317 Try to find the HTML encoding information (Daniel Veillard),
    575875 don't output charset=html (Daniel Veillard),
    571271 fix semantic of xsd:all with minOccurs=0 (Daniel Veillard),
    570702 fix a bug in regexp determinism checking (Daniel Veillard),
    567619 xmlValidateNotationUse missing param test (Daniel Veillard),
    574393 Â¿ utf-8 filename magic for compressed files (Hans Breuer),
    Fix a couple of problems in the parser (Daniel Veillard),
    585505 Â¿ Document ids and refs populated by XSD (Wayne Jensen),
    582906 XSD validating multiple imports of the same schema (Jason Childs),
    Bug 582887 Â¿ problems validating complex schemas (Jason Childs),
    Bug 579729 Â¿ fix XSD schemas parsing crash (Miroslav Bajtos),
    576368 Â¿ htmlChunkParser with special attributes (Jiri Netolicky),
    Bug 565747 Â¿ relax anyURI data character checking (Vincent Lefevre),
    Preserve attributes of include start on tree copy (Petr Pajas),
    Skip silently unrecognized XPointer schemes (Jakub Wilk),
    Fix leak on SAX1, xmllint --sax1 option and debug (Daniel Veillard),
    potential NULL dereference on non-glibc (Jim Meyering),
    Fix an XSD validation crash (Daniel Veillard),
    Fix a regression in streaming entities support (Daniel Veillard),
    Fix a couple of ABI issues with C14N 1.1 (Aleksey Sanin),
    Aleksey Sanin support for c14n 1.1 (Aleksey Sanin),
    reader bug fix with entities (Daniel Veillard),
    use options from current parser ctxt for external entities (Rob Richards),
    581612 use %s to printf strings (Christian Persch),
    584605 change the threading initialization sequence (Igor Novoseltsev),
    580705 keep line numbers in HTML parser (Aaron Patterson),
    581803 broken HTML table attributes init (Roland Steiner),
    do not set error code in xmlNsWarn (Rob Richards),
    564217 fix structured error handling problems,
    reuse options from current parser for entities (Rob Richards),
    xmlXPathRegisterNs should not allow enpty prefixes (Daniel Veillard),
    add a missing check in xmlAddSibling (Kris Breuker),
    avoid leaks on errors (Jinmei Tatuya)
  </li>
  <li>Cleanup:
    Chasing dead assignments reported by clang-scan (Daniel Veillard),
    A few more safety cleanup raised by scan (Daniel Veillard),
    Fixing assorted potential problems raised by scan (Daniel Veillard),
    Potential uninitialized arguments raised by scan (Daniel Veillard),
    Fix a bunch of scan 'dead increments' and cleanup (Daniel Veillard),
    Remove a pedantic warning (Daniel Veillard),
    555833 always use rm -f in uninstall-local (Daniel Veillard),
    542394 xmlRegisterOutputCallbacks MAX_INPUT_CALLBACK (Daniel Veillard),
    Autoregenerate libxml2.syms automated checkings (Daniel Veillard),
    Make xmlRecoverDoc const (Martin Trappel) (Daniel Veillard),
    Both args of xmlStrcasestr are const (Daniel Veillard),
    hide the nbParse* variables used for debugging (Mike Hommey),
    570806 changed include of config.h (William M. Brack),
    cleanups and error reports when xmlTextWriterVSprintf fails (Jinmei Tatuya)
  </li>
</ul>
<h3>2.7.3: Jan 18 2009</h3>
<ul>
  <li>Build fix: fix build when HTML support is not included.</li>
  <li>Bug fixes: avoid memory overflow in gigantic text nodes,
      indentation problem on the writed (Rob Richards),
      xmlAddChildList pointer problem (Rob Richards and Kevin Milburn),
      xmlAddChild problem with attribute (Rob Richards and Kris Breuker),
      avoid a memory leak in an edge case (Daniel Zimmermann),
      deallocate some pthread data (Alex Ott).</li>
  <li>Improvements: configure option to avoid rebuilding docs (Adrian Bunk),
      limit text nodes to 10MB max by default, add element traversal
      APIs, add a parser option to enable pre 2.7 SAX behavior (Rob Richards),
      add gcc malloc checking (Marcus Meissner), add gcc printf like functions
      parameters checking (Marcus Meissner).</li>
</ul>
<h3>2.7.2: Oct 3 2008</h3>
<ul>
    <li>Portability fix: fix solaris compilation problem, fix compilation
        if XPath is not configured in</li>
    <li>Bug fixes: nasty entity bug introduced in 2.7.0, restore old behaviour
        when saving an HTML doc with an xml dump function, HTML UTF-8 parsing
        bug, fix reader custom error handlers (Riccardo Scussat)
    <li>Improvement: xmlSave options for more flexibility to save as
        XML/HTML/XHTML, handle leading BOM in HTML documents</li>
</ul>

<h3>2.7.1: Sep 1 2008</h3>
<ul>
    <li>Portability fix: Borland C fix (Moritz Both)</li>
    <li>Bug fixes: python serialization wrappers, XPath QName corner
        case handking and leaks (Martin)</li>
    <li>Improvement: extend the xmlSave to handle HTML documents and trees</li>
    <li>Cleanup: python serialization wrappers</li>
</ul>

<h3>2.7.0: Aug 30 2008</h3>
<ul>
  <li>Documentation: switch ChangeLog to UTF-8, improve mutithreads and
      xmlParserCleanup docs</li>
  <li>Portability fixes: Older Win32 platforms (Rob Richards), MSVC
      porting fix (Rob Richards), Mac OS X regression tests (Sven Herzberg),
      non GNUCC builds (Rob Richards), compilation on Haiku (Andreas FÃ¤rber)
      </li>
  <li>Bug fixes: various realloc problems (Ashwin), potential double-free
      (Ashwin), regexp crash, icrash with invalid whitespace facets (Rob
      Richards), pattern fix when streaming (William Brack), various XML
      parsing and validation fixes based on the W3C regression tests, reader
      tree skipping function fix (Ashwin), Schemas regexps escaping fix
      (Volker Grabsch), handling of entity push errors (Ashwin), fix a slowdown
      when encoder can't serialize characters on output</li>
  <li>Code cleanup: compilation fix without the reader, without the output
      (Robert Schwebel), python whitespace (Martin), many space/tabs cleanups,
      serious cleanup of the entity handling code</li>
  <li>Improvement: switch parser to XML-1.0 5th edition, add parsing flags
      for old versions, switch URI parsing to RFC 3986,
      add xmlSchemaValidCtxtGetParserCtxt (Holger Kaelberer),
      new hashing functions for dictionaries (based on Stefan Behnel work),
      improve handling of misplaced html/head/body in HTML parser, better
      regression test tools and code coverage display, better algorithms
      to detect various versions of the billion laughts attacks, make
      arbitrary parser limits avoidable as a parser option</li>
</ul>
<h3>2.6.32: Apr 8 2008</h3>
<ul>
  <li>Documentation: returning heap memory to kernel (Wolfram Sang),
      trying to clarify xmlCleanupParser() use, xmlXPathContext improvement
      (Jack Jansen), improve the *Recover* functions documentation,
      XmlNodeType doc link fix (Martijn Arts)</li>
  <li>Bug fixes: internal subset memory leak (Ashwin), avoid problem with
      paths starting with // (Petr Sumbera), streaming XSD validation callback
      patches (Ashwin), fix redirection on port other than 80 (William Brack),
      SAX2 leak (Ashwin), XInclude fragment of own document (Chris Ryan),
      regexp bug with '.' (Andrew Tosh), flush the writer at the end of the
      document (Alfred Mickautsch), output I/O bug fix (William Brack),
      writer CDATA output after a text node (Alex Khesin), UTF-16 encoding
      detection (William Brack), fix handling of empty CDATA nodes for Safari
      team, python binding problem with namespace nodes, improve HTML parsing
      (Arnold Hendriks), regexp automata build bug, memory leak fix (Vasily
      Chekalkin), XSD test crash, weird system parameter entity parsing problem,
      allow save to file:///X:/ windows paths, various attribute normalisation
      problems, externalSubsetSplit fix (Ashwin), attribute redefinition in
      the DTD (Ashwin), fix in char ref parsing check (Alex Khesin), many
      out of memory handling fixes (Ashwin), XPath out of memory handling fixes
      (Alvaro Herrera), various realloc problems (Ashwin), UCS4 encoding
      conversion buffer size (Christian Fruth), problems with EatName
      functions on memory errors, BOM handling in external parsed entities
      (Mark Rowe)</li>
  <li>Code cleanup: fix build under VS 2008 (David Wimsey), remove useless
      mutex in xmlDict (Florent Guilian), Mingw32 compilation fix (Carlo
      Bramini), Win and MacOS EOL cleanups (Florent Guiliani), iconv need
      a const detection (Roumen Petrov), simplify xmlSetProp (Julien Charbon),
      cross compilation fixes for Mingw (Roumen Petrov), SCO Openserver build
      fix (Florent Guiliani), iconv uses const on Win32 (Rob Richards),
      duplicate code removal (Ashwin), missing malloc test and error reports
      (Ashwin), VMS makefile fix (Tycho Hilhorst)</li>
  <li>improvements: better plug of schematron in the normal error handling
      (Tobias Minich)</li>
</ul>

<h3>2.6.31: Jan 11 2008</h3>
<ul>
  <li>Security fix: missing of checks in UTF-8 parsing</li>
  <li>Bug fixes: regexp bug, dump attribute from XHTML document, fix
      xmlFree(NULL) to not crash in debug mode, Schematron parsing crash
      (Rob Richards), global lock free on Windows (Marc-Antoine Ruel),
      XSD crash due to double free (Rob Richards), indentation fix in
      xmlTextWriterFullEndElement (Felipe Pena), error in attribute type
      parsing if attribute redeclared, avoid crash in hash list scanner if
      deleting elements, column counter bug fix (Christian Schmidt),
      HTML embed element saving fix (Stefan Behnel), avoid -L/usr/lib
      output from xml2-config (Fred Crozat), avoid an xmllint crash 
      (Stefan Kost), don't stop HTML parsing on out of range chars.
      </li>
  <li>Code cleanup: fix open() call third argument, regexp cut'n paste
      copy error, unused variable in __xmlGlobalInitMutexLock (Hannes Eder),
      some make distcheck related fixes (John Carr)</li>
  <li>Improvements: HTTP Header: includes port number (William Brack),
      testURI --debug option, </li>
</ul>
<h3>2.6.30: Aug 23 2007</h3>
<ul>
  <li>Portability: Solaris crash on error handling, windows path fixes
      (Roland Schwarz and Rob Richards), mingw build (Roland Schwarz)</li>
  <li>Bugfixes: xmlXPathNodeSetSort problem (William Brack), leak when
      reusing a writer for a new document (Dodji Seketeli), Schemas
      xsi:nil handling patch (Frank Gross), relative URI build problem
      (Patrik Fimml), crash in xmlDocFormatDump, invalid char in comment
      detection bug, fix disparity with xmlSAXUserParseMemory, automata
      generation for complex regexp counts problems, Schemas IDC import
      problems (Frank Gross), xpath predicate evailation error handling
      (William Brack)</li>
</ul>
<h3>2.6.29: Jun 12 2007</h3>
<ul>
  <li>Portability: patches from Andreas Stricke for WinCEi,
      fix compilation warnings (William Brack), avoid warnings on Apple OS/X
      (Wendy Doyle and Mark Rowe), Windows compilation and threading
      improvements (Rob Richards), compilation against old Python versions,
      new GNU tar changes (Ryan Hill)</li>
  <li>Documentation: xmlURIUnescapeString comment, </li>
  <li>Bugfixes: xmlBufferAdd problem (Richard Jones), 'make valgrind'
      flag fix (Richard Jones), regexp interpretation of \,
      htmlCreateDocParserCtxt (Jean-Daniel Dupas), configure.in
      typo (Bjorn Reese), entity content failure, xmlListAppend() fix
      (Georges-AndrÃ© Silber), XPath number serialization (William Brack),
      nanohttp gzipped stream fix (William Brack and Alex Cornejo),
      xmlCharEncFirstLine typo (Mark Rowe), uri bug (FranÃ§ois Delyon),
      XPath string value of PI nodes (William Brack), XPath node set
      sorting bugs (William Brack), avoid outputting namespace decl
      dups in the writer (Rob Richards), xmlCtxtReset bug, UTF-8 encoding
      error handling, recustion on next in catalogs, fix a Relax-NG crash,
      workaround wrong file: URIs, htmlNodeDumpFormatOutput on attributes,
      invalid character in attribute detection bug, big comments before 
      internal subset streaming bug, HTML parsing of attributes with : in
      the name, IDness of name in HTML (Dagfinn I. MannsÃ¥ker) </li>
  <li>Improvement: keep URI query parts in raw form (Richard Jones),
      embed tag support in HTML (Michael Day) </li>
</ul>

<h3>2.6.28: Apr 17 2007</h3>
<ul>
  <li>Documentation: comment fixes (Markus Keim), xpath comments fixes too
      (James Dennett)</li>
  <li>Bug fixes: XPath bug (William Brack), HTML parser autoclose stack usage
      (Usamah Malik), various regexp bug fixes (DV and William), path conversion
      on Windows (Igor Zlatkovic), htmlCtxtReset fix (Michael Day), XPath
      principal node of axis bug, HTML serialization of some codepoint
      (Steven Rainwater), user data propagation in XInclude (Michael Day),
      standalone and XML decl detection (Michael Day), Python id output
      for some id, fix the big python string memory leak, URI parsing fixes
      (StÃ©phane Bidoul and William), long comments parsing bug (William),
      concurrent threads initialization (Ted Phelps), invalid char
      in text XInclude (William), XPath memory leak (William), tab in
      python problems (Andreas Hanke), XPath node comparison error
      (Oleg Paraschenko), cleanup patch for reader (Julien Reichel),
      XML Schemas attribute group (William), HTML parsing problem (William),
      fix char 0x2d in regexps (William), regexp quantifier range with
      min occurs of 0 (William), HTML script/style parsing (Mike Day)</li>
  <li>Improvement: make xmlTextReaderSetup() public</li>
  <li>Compilation and postability: fix a missing include problem (William),
      __ss_family on AIX again (BjÃ¶rn Wiberg), compilation without zlib
      (Michael Day), catalog patch for Win32 (Christian Ehrlicher),
      Windows CE fixes (Andreas Stricke)</li>
  <li>Various CVS to SVN infrastructure changes</li>
</ul>
<h3>2.6.27: Oct 25 2006</h3>
<ul>
  <li>Portability fixes: file names on windows (Roland Schwingel, 
      Emelyanov Alexey), windows compile fixup (Rob Richards), 
      AIX iconv() is apparently case sensitive</li>
  <li>improvements: Python XPath types mapping (Nic Ferrier), XPath optimization
      (Kasimier), add xmlXPathCompiledEvalToBoolean (Kasimier), Python node
      equality and comparison (Andreas Pakulat), xmlXPathCollectAndTest
      improvememt (Kasimier), expose if library was compiled with zlib 
      support (Andrew Nosenko), cache for xmlSchemaIDCMatcher structs
      (Kasimier), xmlTextConcat should work with comments and PIs (Rob
      Richards), export htmlNewParserCtxt needed by Michael Day, refactoring
      of catalog entity loaders (Michael Day), add XPointer support to 
      python bindings (Ross Reedstrom, Brian West and Stefan Anca), 
      try to sort out most file path to URI conversions and xmlPathToUri,
      add --html --memory case to xmllint</li>
  <li>building fix: fix --with-minimum (Felipe Contreras), VMS fix, 
      const'ification of HTML parser structures (Matthias Clasen),
      portability fix (Emelyanov Alexey), wget autodetection (Peter
      Breitenlohner),  remove the build path recorded in the python
      shared module, separate library flags for shared and static builds
      (Mikhail Zabaluev), fix --with-minimum --with-sax1 builds, fix
      --with-minimum --with-schemas builds</li>
  <li>bug fix: xmlGetNodePath fix (Kasimier), xmlDOMWrapAdoptNode and
      attribute (Kasimier), crash when using the recover mode, 
      xmlXPathEvalExpr problem (Kasimier), xmlXPathCompExprAdd bug (Kasimier),
      missing destroy in xmlFreeRMutex (Andrew Nosenko), XML Schemas fixes
      (Kasimier), warning on entities processing, XHTML script and style
      serialization (Kasimier), python generator for long types, bug in
      xmlSchemaClearValidCtxt (Bertrand Fritsch), xmlSchemaXPathEvaluate
      allocation bug (Marton Illes), error message end of line (Rob Richards),
      fix attribute serialization in writer (Rob Richards), PHP4 DTD validation
      crash, parser safety patch (Ben Darnell), _private context propagation
      when parsing entities (with Michael Day), fix entities behaviour when 
      using SAX, URI to file path fix (Mikhail Zabaluev), disappearing validity
      context, arg error in SAX callback (Mike Hommey), fix mixed-content
      autodetect when using --noblanks, fix xmlIOParseDTD error handling,
      fix bug in xmlSplitQName on special Names, fix Relax-NG element content
      validation bug, fix xmlReconciliateNs bug, fix potential attribute 
      XML parsing bug, fix line/column accounting in XML parser, chunking bug
      in the HTML parser on script, try to detect obviously buggy HTML
      meta encoding indications, bugs with encoding BOM and xmlSaveDoc, 
      HTML entities in attributes parsing, HTML minimized attribute values,
      htmlReadDoc and htmlReadIO were broken, error handling bug in
      xmlXPathEvalExpression (Olaf Walkowiak), fix a problem in
      htmlCtxtUseOptions, xmlNewInputFromFile could leak (Marius Konitzer),
      bug on misformed SSD regexps (Christopher Boumenot)
      </li>
  <li>documentation: warning about XML_PARSE_COMPACT (Kasimier Buchcik),
      fix xmlXPathCastToString documentation, improve man pages for
      xmllitn and xmlcatalog (Daniel Leidert), fixed comments of a few
      functions</li>
</ul>
<h3>2.6.26: Jun 6 2006</h3>
<ul>
  <li>portability fixes: Python detection (Joseph Sacco), compilation
    error(William Brack and Graham Bennett), LynxOS patch (Olli Savia)</li>
  <li>bug fixes: encoding buffer problem, mix of code and data in
    xmlIO.c(Kjartan Maraas), entities in XSD validation (Kasimier Buchcik),
    variousXSD validation fixes (Kasimier), memory leak in pattern (Rob
    Richards andKasimier), attribute with colon in name (Rob Richards), XPath
    leak inerror reporting (Aleksey Sanin), XInclude text include of
    selfdocument.</li>
  <li>improvements: Xpath optimizations (Kasimier), XPath object
    cache(Kasimier)</li>
</ul>

<h3>2.6.25: Jun 6 2006:</h3>

<p>Do not use or package 2.6.25</p>

<h3>2.6.24: Apr 28 2006</h3>
<ul>
  <li>Portability fixes: configure on Windows, testapi compile on windows
      (Kasimier Buchcik, venkat naidu), Borland C++ 6 compile (Eric Zurcher),
      HP-UX compiler workaround (Rick Jones), xml2-config bugfix, gcc-4.1
      cleanups, Python detection scheme (Joseph Sacco), UTF-8 file paths on
      Windows (Roland Schwingel).
      </li>
  <li>Improvements: xmlDOMWrapReconcileNamespaces xmlDOMWrapCloneNode (Kasimier
      Buchcik), XML catalog debugging (Rick Jones), update to Unicode 4.01.</li>
  <li>Bug fixes: xmlParseChunk() problem in 2.6.23, xmlParseInNodeContext()
      on HTML docs, URI behaviour on Windows (Rob Richards), comment streaming
      bug, xmlParseComment (with William Brack), regexp bug fixes (DV &amp;
      Youri Golovanov), xmlGetNodePath on text/CDATA (Kasimier),
      one Relax-NG interleave bug, xmllint --path and --valid,
      XSD bugfixes (Kasimier), remove debug
      left in Python bindings (Nic Ferrier), xmlCatalogAdd bug (Martin Cole),
      xmlSetProp fixes (Rob Richards), HTML IDness (Rob Richards), a large
      number of cleanups and small fixes based on Coverity reports, bug
      in character ranges, Unicode tables const (Aivars Kalvans), schemas
      fix (Stefan Kost), xmlRelaxNGParse error deallocation, 
      xmlSchemaAddSchemaDoc error deallocation, error handling on unallowed
      code point, ixmllint --nonet to never reach the net (Gary Coady),
      line break in writer after end PI (Jason Viers). </li>
  <li>Documentation: man pages updates and cleanups (Daniel Leidert).</li>
  <li>New features: Relax NG structure error handlers.</li>
</ul>

<h3>2.6.23: Jan 5 2006</h3>
<ul>
  <li>portability fixes: Windows (Rob Richards), getaddrinfo on Windows
    (Kolja Nowak, Rob Richards), icc warnings (Kjartan Maraas),
    --with-minimum compilation fixes (William Brack), error case handling fix
    on Solaris (Albert Chin), don't use 'list' as parameter name reported by
    Samuel Diaz Garcia, more old Unices portability fixes (Albert Chin),
    MinGW compilation (Mark Junker), HP-UX compiler warnings (Rick
  Jones),</li>
  <li>code cleanup: xmlReportError (Adrian Mouat), remove xmlBufferClose
    (Geert Jansen), unreachable code (Oleksandr Kononenko), refactoring
    parsing code (Bjorn Reese)</li>
  <li>bug fixes: xmlBuildRelativeURI and empty path (William Brack),
    combinatory explosion and performances in regexp code, leak in
    xmlTextReaderReadString(), xmlStringLenDecodeEntities problem (Massimo
    Morara), Identity Constraints bugs and a segfault (Kasimier Buchcik),
    XPath pattern based evaluation bugs (DV &amp; Kasimier),
    xmlSchemaContentModelDump() memory leak (Kasimier), potential leak in
    xmlSchemaCheckCSelectorXPath(), xmlTextWriterVSprintf() misuse of
    vsnprintf (William Brack), XHTML serialization fix (Rob Richards), CRLF
    split problem (William), issues with non-namespaced attributes in
    xmlAddChild() xmlAddNextSibling() and xmlAddPrevSibling() (Rob Richards),
    HTML parsing of script, Python must not output to stdout (Nic Ferrier),
    exclusive C14N namespace visibility (Aleksey Sanin), XSD datatype
    totalDigits bug (Kasimier Buchcik), error handling when writing to an
    xmlBuffer (Rob Richards), runtest schemas error not reported (Hisashi
    Fujinaka), signed/unsigned problem in date/time code (Albert Chin), fix
    XSI driven XSD validation (Kasimier), parsing of xs:decimal (Kasimier),
    fix DTD writer output (Rob Richards), leak in xmlTextReaderReadInnerXml
    (Gary Coady), regexp bug affecting schemas (Kasimier), configuration of
    runtime debugging (Kasimier), xmlNodeBufGetContent bug on entity refs
    (Oleksandr Kononenko), xmlRegExecPushString2 bug (Sreeni Nair),
    compilation and build fixes (Michael Day), removed dependencies on
    xmlSchemaValidError (Kasimier), bug with &lt;xml:foo/&gt;, more XPath
    pattern based evaluation fixes (Kasimier)</li>
  <li>improvements: XSD Schemas redefinitions/restrictions (Kasimier
    Buchcik), node copy checks and fix for attribute (Rob Richards), counted
    transition bug in regexps, ctxt-&gt;standalone = -2 to indicate no
    standalone attribute was found, add xmlSchemaSetParserStructuredErrors()
    (Kasimier Buchcik), add xmlTextReaderSchemaValidateCtxt() to API
    (Kasimier), handle gzipped HTTP resources (Gary Coady), add
    htmlDocDumpMemoryFormat. (Rob Richards),</li>
  <li>documentation: typo (Michael Day), libxml man page (Albert Chin), save
    function to XML buffer (Geert Jansen), small doc fix (Aron Stansvik),</li>
</ul>

<h3>2.6.22: Sep 12 2005</h3>
<ul>
  <li>build fixes: compile without schematron (StÃ©phane Bidoul)</li>
  <li>bug fixes: xmlDebugDumpNode on namespace node (Oleg Paraschenko)i,
    CDATA push parser bug, xmlElemDump problem with XHTML1 doc,
    XML_FEATURE_xxx clash with expat headers renamed XML_WITH_xxx, fix some
    output formatting for meta element (Rob Richards), script and style
    XHTML1 serialization (David Madore), Attribute derivation fixups in XSD
    (Kasimier Buchcik), better IDC error reports (Kasimier Buchcik)</li>
  <li>improvements: add XML_SAVE_NO_EMPTY xmlSaveOption (Rob Richards), add
    XML_SAVE_NO_XHTML xmlSaveOption, XML Schemas improvements preparing for
    derive (Kasimier Buchcik).</li>
  <li>documentation: generation of gtk-doc like docs, integration with
    devhelp.</li>
</ul>

<h3>2.6.21: Sep 4 2005</h3>
<ul>
  <li>build fixes: Cygwin portability fixes (Gerrit P. Haase), calling
    convention problems on Windows (Marcus Boerger), cleanups based on Linus'
    sparse tool, update of win32/configure.js (Rob Richards), remove warnings
    on Windows(Marcus Boerger), compilation without SAX1, detection of the
    Python binary, use $GCC inestad of $CC = 'gcc' (Andrew W. Nosenko),
    compilation/link with threads and old gcc, compile problem by C370 on
    Z/OS,</li>
  <li>bug fixes: http_proxy environments (Peter Breitenlohner), HTML UTF-8
    bug (Jiri Netolicky), XPath NaN compare bug (William Brack),
    htmlParseScript potential bug, Schemas regexp handling of spaces, Base64
    Schemas comparisons NIST passes, automata build error xsd:all,
    xmlGetNodePath for namespaced attributes (Alexander Pohoyda), xmlSchemas
    foreign namespaces handling, XML Schemas facet comparison (Kupriyanov
    Anatolij), xmlSchemaPSimpleTypeErr error report (Kasimier Buchcik), xml:
    namespace ahndling in Schemas (Kasimier), empty model group in Schemas
    (Kasimier), wildcard in Schemas (Kasimier), URI composition (William),
    xs:anyType in Schemas (Kasimier), Python resolver emitting error
    messages directly, Python xmlAttr.parent (Jakub Piotr Clapa), trying to
    fix the file path/URI conversion, xmlTextReaderGetAttribute fix (Rob
    Richards), xmlSchemaFreeAnnot memleak (Kasimier), HTML UTF-8
    serialization, streaming XPath, Schemas determinism detection problem,
    XInclude bug, Schemas context type (Dean Hill), validation fix (Derek
    Poon), xmlTextReaderGetAttribute[Ns] namespaces (Rob Richards), Schemas
    type fix (Kuba Nowakowski), UTF-8 parser bug, error in encoding handling,
    xmlGetLineNo fixes, bug on entities handling, entity name extraction in
    error handling with XInclude, text nodes in HTML body tags (Gary Coady),
    xml:id and IDness at the treee level fixes, XPath streaming patterns
  bugs.</li>
  <li>improvements: structured interfaces for schemas and RNG error reports
    (Marcus Boerger), optimization of the char data inner loop parsing
    (thanks to Behdad Esfahbod for the idea), schematron validation though
    not finished yet, xmlSaveOption to omit XML declaration, keyref match
    error reports (Kasimier), formal expression handling code not plugged
    yet, more lax mode for the HTML parser, parser XML_PARSE_COMPACT option
    for text nodes allocation.</li>
  <li>documentation: xmllint man page had --nonet duplicated</li>
</ul>

<h3>2.6.20: Jul 10 2005</h3>
<ul>
  <li>build fixes: Windows build (Rob Richards), Mingw compilation (Igor
    Zlatkovic), Windows Makefile (Igor), gcc warnings (Kasimier and
    andriy@google.com), use gcc weak references to pthread to avoid the
    pthread dependency on Linux, compilation problem (Steve Nairn), compiling
    of subset (Morten Welinder), IPv6/ss_family compilation (William Brack),
    compilation when disabling parts of the library, standalone test
    distribution.</li>
  <li>bug fixes: bug in lang(), memory cleanup on errors (William Brack),
    HTTP query strings (Aron Stansvik), memory leak in DTD (William), integer
    overflow in XPath (William), nanoftp buffer size, pattern "." apth fixup
    (Kasimier), leak in tree reported by Malcolm Rowe, replaceNode patch
    (Brent Hendricks), CDATA with NULL content (Mark Vakoc), xml:base fixup
    on XInclude (William), pattern fixes (William), attribute bug in
    exclusive c14n (Aleksey Sanin), xml:space and xml:lang with SAX2 (Rob
    Richards), namespace trouble in complex parsing (Malcolm Rowe), XSD type
    QNames fixes (Kasimier), XPath streaming fixups (William), RelaxNG bug
    (Rob Richards), Schemas for Schemas fixes (Kasimier), removal of ID (Rob
    Richards), a small RelaxNG leak, HTML parsing in push mode bug (James
    Bursa), failure to detect UTF-8 parsing bugs in CDATA sections,
    areBlanks() heuristic failure, duplicate attributes in DTD bug
  (William).</li>
  <li>improvements: lot of work on Schemas by Kasimier Buchcik both on
    conformance and streaming, Schemas validation messages (Kasimier Buchcik,
    Matthew Burgess), namespace removal at the python level (Brent
    Hendricks), Update to new Schemas regression tests from W3C/Nist
    (Kasimier), xmlSchemaValidateFile() (Kasimier), implementation of
    xmlTextReaderReadInnerXml and xmlTextReaderReadOuterXml (James Wert),
    standalone test framework and programs, new DOM import APIs
    xmlDOMWrapReconcileNamespaces() xmlDOMWrapAdoptNode() and
    xmlDOMWrapRemoveNode(), extension of xmllint capabilities for SAX and
    Schemas regression tests, xmlStopParser() available in pull mode too,
    ienhancement to xmllint --shell namespaces support, Windows port of the
    standalone testing tools (Kasimier and William),
    xmlSchemaValidateStream() xmlSchemaSAXPlug() and xmlSchemaSAXUnplug() SAX
    Schemas APIs, Schemas xmlReader support.</li>
</ul>

<h3>2.6.19: Apr 02 2005</h3>
<ul>
  <li>build fixes: drop .la from RPMs, --with-minimum build fix (William
    Brack), use XML_SOCKLEN_T instead of SOCKLEN_T because it breaks with AIX
    5.3 compiler, fixed elfgcchack.h generation and PLT reduction code on
    Linux/ELF/gcc4</li>
  <li>bug fixes: schemas type decimal fixups (William Brack), xmmlint return
    code (Gerry Murphy), small schemas fixes (Matthew Burgess and GUY
    Fabrice), workaround "DAV:" namespace brokenness in c14n (Aleksey Sanin),
    segfault in Schemas (Kasimier Buchcik), Schemas attribute validation
    (Kasimier), Prop related functions and xmlNewNodeEatName (Rob Richards),
    HTML serialization of name attribute on a elements, Python error handlers
    leaks and improvement (Brent Hendricks), uninitialized variable in
    encoding code, Relax-NG validation bug, potential crash if
    gnorableWhitespace is NULL, xmlSAXParseDoc and xmlParseDoc signatures,
    switched back to assuming UTF-8 in case no encoding is given at
    serialization time</li>
  <li>improvements: lot of work on Schemas by Kasimier Buchcik on facets
    checking and also mixed handling.</li>
  <li></li>
</ul>

<h3>2.6.18: Mar 13 2005</h3>
<ul>
  <li>build fixes: warnings (Peter Breitenlohner), testapi.c generation,
    Bakefile support (Francesco Montorsi), Windows compilation (Joel Reed),
    some gcc4 fixes, HP-UX portability fixes (Rick Jones).</li>
  <li>bug fixes: xmlSchemaElementDump namespace (Kasimier Buchcik), push and
    xmlreader stopping on non-fatal errors, thread support for dictionaries
    reference counting (Gary Coady), internal subset and push problem, URL
    saved in xmlCopyDoc, various schemas bug fixes (Kasimier), Python paths
    fixup (Stephane Bidoul), xmlGetNodePath and namespaces, xmlSetNsProp fix
    (Mike Hommey), warning should not count as error (William Brack),
    xmlCreatePushParser empty chunk, XInclude parser flags (William), cleanup
    FTP and HTTP code to reuse the uri parsing and IPv6 (William),
    xmlTextWriterStartAttributeNS fix (Rob Richards), XMLLINT_INDENT being
    empty (William), xmlWriter bugs (Rob Richards), multithreading on Windows
    (Rich Salz), xmlSearchNsByHref fix (Kasimier), Python binding leak (Brent
    Hendricks), aliasing bug exposed by gcc4 on s390, xmlTextReaderNext bug
    (Rob Richards), Schemas decimal type fixes (William Brack),
    xmlByteConsumed static buffer (Ben Maurer).</li>
  <li>improvement: speedup parsing comments and DTDs, dictionary support for
    hash tables, Schemas Identity constraints (Kasimier), streaming XPath
    subset, xmlTextReaderReadString added (Bjorn Reese), Schemas canonical
    values handling (Kasimier), add xmlTextReaderByteConsumed (Aron
  Stansvik),</li>
  <li>Documentation: Wiki support (Joel Reed)</li>
</ul>

<h3>2.6.17: Jan 16 2005</h3>
<ul>
  <li>build fixes: Windows, warnings removal (William Brack),
    maintainer-clean dependency(William), build in a different directory
    (William), fixing --with-minimum configure build (William), BeOS build
    (Marcin Konicki), Python-2.4 detection (William), compilation on AIX (Dan
    McNichol)</li>
  <li>bug fixes: xmlTextReaderHasAttributes (Rob Richards), xmlCtxtReadFile()
    to use the catalog(s), loop on output (William Brack), XPath memory leak,
    ID deallocation problem (Steve Shepard), debugDumpNode crash (William),
    warning not using error callback (William), xmlStopParser bug (William),
    UTF-16 with BOM on DTDs (William), namespace bug on empty elements in
    push mode (Rob Richards), line and col computations fixups (Aleksey
    Sanin), xmlURIEscape fix (William), xmlXPathErr on bad range (William),
    patterns with too many steps, bug in RNG choice optimization, line number
    sometimes missing.</li>
  <li>improvements: XSD Schemas (Kasimier Buchcik), python generator
    (William), xmlUTF8Strpos speedup (William), unicode Python strings
    (William), XSD error reports (Kasimier Buchcik), Python __str__ call
    serialize().</li>
  <li>new APIs: added xmlDictExists(), GetLineNumber and GetColumnNumber for
    the xmlReader (Aleksey Sanin), Dynamic Shared Libraries APIs (mostly Joel
    Reed), error extraction API from regexps, new XMLSave option for format
    (Phil Shafer)</li>
  <li>documentation: site improvement (John Fleck), FAQ entries
  (William).</li>
</ul>

<h3>2.6.16: Nov 10 2004</h3>
<ul>
  <li>general hardening and bug fixing crossing all the API based on new
    automated regression testing</li>
  <li>build fix: IPv6 build and test on AIX (Dodji Seketeli)</li>
  <li>bug fixes: problem with XML::Libxml reported by Petr Pajas,  encoding
    conversion functions return values, UTF-8 bug affecting XPath reported by
    Markus Bertheau, catalog problem with NULL entries (William Brack)</li>
  <li>documentation: fix to xmllint man page, some API function description
    were updated.</li>
  <li>improvements: DTD validation APIs provided at the Python level (Brent
    Hendricks)</li>
</ul>

<h3>2.6.15: Oct 27 2004</h3>
<ul>
  <li>security fixes on the nanoftp and nanohttp modules</li>
  <li>build fixes: xmllint detection bug in configure, building outside the
    source tree (Thomas Fitzsimmons)</li>
  <li>bug fixes: HTML parser on broken ASCII chars in names (William), Python
    paths (Malcolm Tredinnick), xmlHasNsProp and default namespace (William),
    saving to python file objects (Malcolm Tredinnick), DTD lookup fix
    (Malcolm), save back &lt;group&gt; in catalogs (William), tree build
    fixes (DV and Rob Richards), Schemas memory bug, structured error handler
    on Python 64bits, thread local memory deallocation, memory leak reported
    by Volker Roth, xmlValidateDtd in the presence of an internal subset,
    entities and _private problem (William), xmlBuildRelativeURI error
    (William).</li>
  <li>improvements: better XInclude error reports (William), tree debugging
    module and tests, convenience functions at the Reader API (Graham
    Bennett), add support for PI in the HTML parser.</li>
</ul>

<h3>2.6.14: Sep 29 2004</h3>
<ul>
  <li>build fixes: configure paths for xmllint and xsltproc, compilation
    without HTML parser, compilation warning cleanups (William Brack &amp;
    Malcolm Tredinnick), VMS makefile update (Craig Berry),</li>
  <li>bug fixes: xmlGetUTF8Char (William Brack), QName properties (Kasimier
    Buchcik), XInclude testing, Notation serialization, UTF8ToISO8859x
    transcoding (Mark Itzcovitz), lots of XML Schemas cleanup and fixes
    (Kasimier), ChangeLog cleanup (Stepan Kasal), memory fixes (Mark Vakoc),
    handling of failed realloc(), out of bound array addressing in Schemas
    date handling, Python space/tabs cleanups (Malcolm Tredinnick), NMTOKENS
    E20 validation fix (Malcolm),</li>
  <li>improvements: added W3C XML Schemas testsuite (Kasimier Buchcik), add
    xmlSchemaValidateOneElement (Kasimier), Python exception hierearchy
    (Malcolm Tredinnick), Python libxml2 driver improvement (Malcolm
    Tredinnick), Schemas support for xsi:schemaLocation,
    xsi:noNamespaceSchemaLocation, xsi:type (Kasimier Buchcik)</li>
</ul>

<h3>2.6.13: Aug 31 2004</h3>
<ul>
  <li>build fixes: Windows and zlib (Igor Zlatkovic), -O flag with gcc,
    Solaris compiler warning, fixing RPM BuildRequires,</li>
  <li>fixes: DTD loading on Windows (Igor), Schemas error reports APIs
    (Kasimier Buchcik), Schemas validation crash, xmlCheckUTF8 (William Brack
    and Julius Mittenzwei), Schemas facet check (Kasimier), default namespace
    problem (William), Schemas hexbinary empty values, encoding error could
    generate a serialization loop.</li>
  <li>Improvements: Schemas validity improvements (Kasimier), added --path
    and --load-trace options to xmllint</li>
  <li>documentation: tutorial update (John Fleck)</li>
</ul>

<h3>2.6.12: Aug 22 2004</h3>
<ul>
  <li>build fixes: fix --with-minimum, elfgcchack.h fixes (Peter
    Breitenlohner), perl path lookup (William), diff on Solaris (Albert
    Chin), some 64bits cleanups.</li>
  <li>Python: avoid a warning with 2.3 (William Brack), tab and space mixes
    (William), wrapper generator fixes (William), Cygwin support (Gerrit P.
    Haase), node wrapper fix (Marc-Antoine Parent), XML Schemas support
    (Torkel Lyng)</li>
  <li>Schemas: a lot of bug fixes and improvements from Kasimier Buchcik</li>
  <li>fixes: RVT fixes (William), XPath context resets bug (William), memory
    debug (Steve Hay), catalog white space handling (Peter Breitenlohner),
    xmlReader state after attribute reading (William), structured error
    handler (William), XInclude generated xml:base fixup (William), Windows
    memory reallocation problem (Steve Hay), Out of Memory conditions
    handling (William and Olivier Andrieu), htmlNewDoc() charset bug,
    htmlReadMemory init (William), a posteriori validation DTD base
    (William), notations serialization missing, xmlGetNodePath (Dodji),
    xmlCheckUTF8 (Diego Tartara), missing line numbers on entity
  (William)</li>
  <li>improvements: DocBook catalog build scrip (William), xmlcatalog tool
    (Albert Chin), xmllint --c14n option, no_proxy environment (Mike Hommey),
    xmlParseInNodeContext() addition, extend xmllint --shell, allow XInclude
    to not generate start/end nodes, extend xmllint --version to include CVS
    tag (William)</li>
  <li>documentation: web pages fixes, validity API docs fixes (William)
    schemas API fix (Eric Haszlakiewicz), xmllint man page (John Fleck)</li>
</ul>

<h3>2.6.11: July 5 2004</h3>
<ul>
  <li>Schemas: a lot of changes and improvements by Kasimier Buchcik for
    attributes, namespaces and simple types.</li>
  <li>build fixes: --with-minimum (William Brack),  some gcc cleanup
    (William), --with-thread-alloc (William)</li>
  <li>portability: Windows binary package change (Igor Zlatkovic), Catalog
    path on Windows</li>
  <li>documentation: update to the tutorial (John Fleck), xmllint return code
    (John Fleck), man pages (Ville Skytta),</li>
  <li>bug fixes: C14N bug serializing namespaces (Aleksey Sanin), testSAX
    properly initialize the library (William), empty node set in XPath
    (William), xmlSchemas errors (William), invalid charref problem pointed
    by Morus Walter, XInclude xml:base generation (William), Relax-NG bug
    with div processing (William), XPointer and xml:base problem(William),
    Reader and entities, xmllint return code for schemas (William), reader
    streaming problem (Steve Ball), DTD serialization problem (William),
    libxml.m4 fixes (Mike Hommey), do not provide destructors as methods on
    Python classes, xmlReader buffer bug, Python bindings memory interfaces
    improvement (with StÃ©phane Bidoul), Fixed the push parser to be back to
    synchronous behaviour.</li>
  <li>improvement: custom per-thread I/O enhancement (Rob Richards), register
    namespace in debug shell (Stefano Debenedetti), Python based regression
    test for non-Unix users (William), dynamically increase the number of
    XPath extension functions in Python and fix a memory leak (Marc-Antoine
    Parent and William)</li>
  <li>performance: hack done with Arjan van de Ven to reduce ELF footprint
    and generated code on Linux, plus use gcc runtime profiling to optimize
    the code generated in the RPM packages.</li>
</ul>

<h3>2.6.10: May 17 2004</h3>
<ul>
  <li>Web page generated for ChangeLog</li>
  <li>build fixes: --without-html problems, make check without make all</li>
  <li>portability: problem with xpath.c on Windows (MSC and Borland), memcmp
    vs. strncmp on Solaris, XPath tests on Windows (Mark Vakoc), C++ do not
    use "list" as parameter name, make tests work with Python 1.5 (Ed
  Davis),</li>
  <li>improvements: made xmlTextReaderMode public, small buffers resizing
    (Morten Welinder), add --maxmem option to xmllint, add
    xmlPopInputCallback() for Matt Sergeant, refactoring of serialization
    escaping, added escaping customization</li>
  <li>bugfixes: xsd:extension (Taihei Goi), assorted regexp bugs (William
    Brack), xmlReader end of stream problem, node deregistration with reader,
    URI escaping and filemanes,  XHTML1 formatting (Nick Wellnhofer), regexp
    transition reduction (William), various XSD Schemas fixes (Kasimier
    Buchcik), XInclude fallback problem (William), weird problems with DTD
    (William), structured error handler callback context (William), reverse
    xmlEncodeSpecialChars() behaviour back to escaping '"'</li>
</ul>

<h3>2.6.9: Apr 18 2004</h3>
<ul>
  <li>implement xml:id Working Draft, relaxed XPath id() checking</li>
  <li>bugfixes: xmlCtxtReset (Brent Hendricks), line number and CDATA (Dave
    Beckett), Relax-NG compilation (William Brack), Regexp patches (with
    William), xmlUriEscape (Mark Vakoc), a Relax-NG notAllowed problem (with
    William), Relax-NG name classes compares (William), XInclude duplicate
    fallback (William), external DTD encoding detection (William), a DTD
    validation bug (William), xmlReader Close() fix, recursive extension
    schemas</li>
  <li>improvements: use xmlRead* APIs in test tools (Mark Vakoc), indenting
    save optimization, better handle IIS broken HTTP redirect  behaviour (Ian
    Hummel), HTML parser frameset (James Bursa), libxml2-python RPM
    dependency, XML Schemas union support (Kasimier Buchcik), warning removal
    clanup (William), keep ChangeLog compressed when installing from RPMs</li>
  <li>documentation: examples and xmlDocDumpMemory docs (John Fleck), new
    example (load, xpath, modify, save), xmlCatalogDump() comments,</li>
  <li>Windows: Borland C++ builder (Eric Zurcher), work around Microsoft
    compiler NaN handling bug (Mark Vakoc)</li>
</ul>

<h3>2.6.8: Mar 23 2004</h3>
<ul>
  <li>First step of the cleanup of the serialization code and APIs</li>
  <li>XML Schemas: mixed content (Adam Dickmeiss), QName handling fixes (Adam
    Dickmeiss), anyURI for "" (John Belmonte)</li>
  <li>Python: Canonicalization C14N support added (Anthony Carrico)</li>
  <li>xmlDocCopyNode() extension (William)</li>
  <li>Relax-NG: fix when processing XInclude results (William), external
    reference in interleave (William), missing error on &lt;choice&gt;
    failure (William), memory leak in schemas datatype facets.</li>
  <li>xmlWriter: patch for better DTD support (Alfred Mickautsch)</li>
  <li>bug fixes: xmlXPathLangFunction memory leak (Mike Hommey and William
    Brack), no ID errors if using HTML_PARSE_NOERROR, xmlcatalog fallbacks to
    URI on SYSTEM lookup failure, XInclude parse flags inheritance (William),
    XInclude and XPointer fixes for entities (William), XML parser bug
    reported by Holger Rauch, nanohttp fd leak (William),  regexps char
    groups '-' handling (William), dictionary reference counting problems,
    do not close stderr.</li>
  <li>performance patches from Petr Pajas</li>
  <li>Documentation fixes: XML_CATALOG_FILES in man pages (Mike Hommey)</li>
  <li>compilation and portability fixes: --without-valid, catalog cleanups
    (Peter Breitenlohner), MingW patch (Roland Schwingel), cross-compilation
    to Windows (Christophe de Vienne),  --with-html-dir fixup (Julio Merino
    Vidal), Windows build (Eric Zurcher)</li>
</ul>

<h3>2.6.7: Feb 23 2004</h3>
<ul>
  <li>documentation: tutorial updates (John Fleck), benchmark results</li>
  <li>xmlWriter: updates and fixes (Alfred Mickautsch, Lucas Brasilino)</li>
  <li>XPath optimization (Petr Pajas)</li>
  <li>DTD ID handling optimization</li>
  <li>bugfixes: xpath number with  &gt; 19 fractional (William Brack), push
    mode with unescaped '&gt;' characters, fix xmllint --stream --timing, fix
    xmllint --memory --stream memory usage, xmlAttrSerializeTxtContent
    handling NULL, trying to fix Relax-NG/Perl interface.</li>
  <li>python: 2.3 compatibility, whitespace fixes (Malcolm Tredinnick)</li>
  <li>Added relaxng option to xmllint --shell</li>
</ul>

<h3>2.6.6: Feb 12 2004</h3>
<ul>
  <li>nanohttp and nanoftp: buffer overflow error on URI parsing (Igor and
    William) reported by Yuuichi Teranishi</li>
  <li>bugfixes: make test and path issues, xmlWriter attribute serialization
    (William Brack), xmlWriter indentation (William), schemas validation
    (Eric Haszlakiewicz), XInclude dictionaries issues (William and Oleg
    Paraschenko), XInclude empty fallback (William), HTML warnings (William),
    XPointer in XInclude (William), Python namespace serialization,
    isolat1ToUTF8 bound error (Alfred Mickautsch), output of parameter
    entities in internal subset (William), internal subset bug in push mode,
    &lt;xs:all&gt; fix (Alexey Sarytchev)</li>
  <li>Build: fix for automake-1.8 (Alexander Winston), warnings removal
    (Philip Ludlam), SOCKLEN_T detection fixes (Daniel Richard), fix
    --with-minimum configuration.</li>
  <li>XInclude: allow the 2001 namespace without warning.</li>
  <li>Documentation: missing example/index.html (John Fleck), version
    dependencies (John Fleck)</li>
  <li>reader API: structured error reporting (Steve Ball)</li>
  <li>Windows compilation: mingw, msys (Mikhail Grushinskiy), function
    prototype (Cameron Johnson), MSVC6 compiler warnings, _WINSOCKAPI_
  patch</li>
  <li>Parsers: added xmlByteConsumed(ctxt) API to get the byte offset in
    input.</li>
</ul>

<h3>2.6.5: Jan 25 2004</h3>
<ul>
  <li>Bugfixes: dictionaries for schemas (William Brack), regexp segfault
    (William), xs:all problem (William), a number of XPointer bugfixes
    (William), xmllint error go to stderr, DTD validation problem with
    namespace, memory leak (William), SAX1 cleanup and minimal options fixes
    (Mark Vadoc), parser context reset on error (Shaun McCance), XPath union
    evaluation problem (William) , xmlReallocLoc with NULL (Aleksey Sanin),
    XML Schemas double free (Steve Ball), XInclude with no href, argument
    callbacks order for XPath callbacks (Frederic Peters)</li>
  <li>Documentation: python scripts (William Brack), xslt stylesheets (John
    Fleck), doc (Sven Zimmerman), I/O example.</li>
  <li>Python bindings: fixes (William), enum support (StÃ©phane Bidoul),
    structured error reporting (StÃ©phane Bidoul)</li>
  <li>XInclude: various fixes for conformance, problem related to dictionary
    references (William &amp; me), recursion (William)</li>
  <li>xmlWriter: indentation (Lucas Brasilino), memory leaks (Alfred
    Mickautsch),</li>
  <li>xmlSchemas: normalizedString datatype (John Belmonte)</li>
  <li>code cleanup for strings functions (William)</li>
  <li>Windows: compiler patches (Mark Vakoc)</li>
  <li>Parser optimizations, a few new XPath and dictionary APIs for future
    XSLT optimizations.</li>
</ul>

<h3>2.6.4: Dec 24 2003</h3>
<ul>
  <li>Windows build fixes (Igor Zlatkovic)</li>
  <li>Some serious XInclude problems reported by Oleg Paraschenko and</li>
  <li>Unix and Makefile packaging fixes (me, William Brack,</li>
  <li>Documentation improvements (John Fleck, William Brack), example fix
    (Lucas Brasilino)</li>
  <li>bugfixes: xmlTextReaderExpand() with xmlReaderWalker, XPath handling of
    NULL strings (William Brack) , API building reader or parser from
    filedescriptor should not close it, changed XPath sorting to be stable
    again (William Brack), xmlGetNodePath() generating '(null)' (William
    Brack), DTD validation and namespace bug (William Brack), XML Schemas
    double inclusion behaviour</li>
</ul>

<h3>2.6.3: Dec 10 2003</h3>
<ul>
  <li>documentation updates and cleanup (DV, William Brack, John Fleck)</li>
  <li>added a repository of examples, examples from Aleksey Sanin, Dodji
    Seketeli, Alfred Mickautsch</li>
  <li>Windows updates: Mark Vakoc, Igor Zlatkovic, Eric Zurcher, Mingw
    (Kenneth Haley)</li>
  <li>Unicode range checking (William Brack)</li>
  <li>code cleanup (William Brack)</li>
  <li>Python bindings: doc (John Fleck),  bug fixes</li>
  <li>UTF-16 cleanup and BOM issues (William Brack)</li>
  <li>bug fixes: ID and xmlReader validation, XPath (William Brack),
    xmlWriter (Alfred Mickautsch), hash.h inclusion problem, HTML parser
    (James Bursa), attribute defaulting and validation, some serialization
    cleanups, XML_GET_LINE macro, memory debug when using threads (William
    Brack), serialization of attributes and entities content, xmlWriter
    (Daniel Schulman)</li>
  <li>XInclude bugfix, new APIs and update to the last version including the
    namespace change.</li>
  <li>XML Schemas improvements: include (Robert Stepanek), import and
    namespace handling, fixed the regression tests troubles, added examples
    based on Eric van der Vlist book, regexp fixes</li>
  <li>preliminary pattern support for streaming (needed for schemas
    constraints), added xmlTextReaderPreservePattern() to collect subdocument
    when streaming.</li>
  <li>various fixes in the structured error handling</li>
</ul>

<h3>2.6.2: Nov 4 2003</h3>
<ul>
  <li>XPath context unregistration fixes</li>
  <li>text node coalescing fixes (Mark Lilback)</li>
  <li>API to screate a W3C Schemas from an existing document (Steve Ball)</li>
  <li>BeOS patches (Marcin 'Shard' Konicki)</li>
  <li>xmlStrVPrintf function added (Aleksey Sanin)</li>
  <li>compilation fixes (Mark Vakoc)</li>
  <li>stdin parsing fix (William Brack)</li>
  <li>a posteriori DTD validation fixes</li>
  <li>xmlReader bug fixes: Walker fixes, python bindings</li>
  <li>fixed xmlStopParser() to really stop the parser and errors</li>
  <li>always generate line numbers when using the new xmlReadxxx
  functions</li>
  <li>added XInclude support to the xmlReader interface</li>
  <li>implemented XML_PARSE_NONET parser option</li>
  <li>DocBook XSLT processing bug fixed</li>
  <li>HTML serialization for &lt;p&gt; elements (William Brack and me)</li>
  <li>XPointer failure in XInclude are now handled as resource errors</li>
  <li>fixed xmllint --html to use the HTML serializer on output (added
    --xmlout to implement the previous behaviour of saving it using the XML
    serializer)</li>
</ul>

<h3>2.6.1: Oct 28 2003</h3>
<ul>
  <li>Mostly bugfixes after the big 2.6.0 changes</li>
  <li>Unix compilation patches: libxml.m4 (Patrick Welche), warnings cleanup
    (William Brack)</li>
  <li>Windows compilation patches (Joachim Bauch, Stephane Bidoul, Igor
    Zlatkovic)</li>
  <li>xmlWriter bugfix (Alfred Mickautsch)</li>
  <li>chvalid.[ch]: couple of fixes from Stephane Bidoul</li>
  <li>context reset: error state reset, push parser reset (Graham
  Bennett)</li>
  <li>context reuse: generate errors if file is not readable</li>
  <li>defaulted attributes for element coming from internal entities
    (Stephane Bidoul)</li>
  <li>Python: tab and spaces mix (William Brack)</li>
  <li>Error handler could crash in DTD validation in 2.6.0</li>
  <li>xmlReader: do not use the document or element _private field</li>
  <li>testSAX.c: avoid a problem with some PIs (Massimo Morara)</li>
  <li>general bug fixes: mandatory encoding in text decl, serializing
    Document Fragment nodes, xmlSearchNs 2.6.0 problem (Kasimier Buchcik),
    XPath errors not reported,  slow HTML parsing of large documents.</li>
</ul>

<h3>2.6.0: Oct 20 2003</h3>
<ul>
  <li>Major revision release: should be API and ABI compatible but got a lot
    of change</li>
  <li>Increased the library modularity, far more options can be stripped out,
    a --with-minimum configuration will weight around 160KBytes</li>
  <li>Use per parser and per document dictionary, allocate names and small
    text nodes from the dictionary</li>
  <li>Switch to a SAX2 like parser rewrote most of the XML parser core,
    provides namespace resolution and defaulted attributes, minimize memory
    allocations and copies, namespace checking and specific error handling,
    immutable buffers, make predefined entities static structures, etc...</li>
  <li>rewrote all the error handling in the library, all errors can be
    intercepted at a structured level, with precise information
  available.</li>
  <li>New simpler and more generic XML and HTML parser APIs, allowing to
    easily modify the parsing options and reuse parser context for multiple
    consecutive documents.</li>
  <li>Similar new APIs for the xmlReader, for options and reuse, provided new
    functions to access content as const strings, use them for Python
  bindings</li>
  <li>a  lot of other smaller API improvements: xmlStrPrintf (Aleksey Sanin),
    Walker i.e. reader on a document tree based on Alfred Mickautsch code,
    make room in nodes for line numbers, reference counting and future PSVI
    extensions, generation of character ranges to be checked with faster
    algorithm (William),  xmlParserMaxDepth (Crutcher Dunnavant), buffer
    access</li>
  <li>New xmlWriter API provided by Alfred Mickautsch</li>
  <li>Schemas: base64 support by Anthony Carrico</li>
  <li>Parser&lt;-&gt;HTTP integration fix, proper processing of the Mime-Type
    and charset information if available.</li>
  <li>Relax-NG: bug fixes including the one reported by Martijn Faassen and
    zeroOrMore, better error reporting.</li>
  <li>Python bindings (StÃ©phane Bidoul), never use stdout for errors
  output</li>
  <li>Portability: all the headers have macros for export and calling
    convention definitions (Igor Zlatkovic), VMS update (Craig A. Berry),
    Windows: threads (Jesse Pelton), Borland compiler (Eric Zurcher,  Igor),
    Mingw (Igor), typos (Mark Vakoc),  beta version (Stephane Bidoul),
    warning cleanups on AIX and MIPS compilers (William Brack), BeOS (Marcin
    'Shard' Konicki)</li>
  <li>Documentation fixes and README (William Brack), search fix (William),
    tutorial updates (John Fleck), namespace docs (Stefan Kost)</li>
  <li>Bug fixes: xmlCleanupParser (Dave Beckett), threading uninitialized
    mutexes, HTML doctype lowercase,  SAX/IO (William), compression detection
    and restore (William), attribute declaration in DTDs (William), namespace
    on attribute in HTML output (William), input filename (Rob Richards),
    namespace DTD validation, xmlReplaceNode (Chris Ryland), I/O callbacks
    (Markus Keim), CDATA serialization (Shaun McCance), xmlReader (Peter
    Derr), high codepoint charref like &amp;#x10FFFF;, buffer access in push
    mode (Justin Fletcher), TLS threads on Windows (Jesse Pelton), XPath bug
    (William), xmlCleanupParser (Marc Liyanage), CDATA output (William), HTTP
    error handling.</li>
  <li>xmllint options: --dtdvalidfpi for Tobias Reif, --sax1 for compat
    testing,  --nodict for building without tree dictionary, --nocdata to
    replace CDATA by text, --nsclean to remove surperfluous  namespace
    declarations</li>
  <li>added xml2-config --libtool-libs option from Kevin P. Fleming</li>
  <li>a lot of profiling and tuning of the code, speedup patch for
    xmlSearchNs() by Luca Padovani. The xmlReader should do far less
    allocation and it speed should get closer to SAX. Chris Anderson worked
    on speeding and cleaning up repetitive checking code.</li>
  <li>cleanup of "make tests"</li>
  <li>libxml-2.0-uninstalled.pc from Malcolm Tredinnick</li>
  <li>deactivated the broken docBook SGML parser code and plugged the XML
    parser instead.</li>
</ul>

<h3>2.5.11: Sep 9 2003</h3>

<p>A bugfix only release:</p>
<ul>
  <li>risk of crash in Relax-NG</li>
  <li>risk of crash when using multithreaded programs</li>
</ul>

<h3>2.5.10: Aug 15 2003</h3>

<p>A bugfixes only release</p>
<ul>
  <li>Windows Makefiles (William Brack)</li>
  <li>UTF-16 support fixes (Mark Itzcovitz)</li>
  <li>Makefile and portability (William Brack) automake, Linux alpha, Mingw
    on Windows (Mikhail Grushinskiy)</li>
  <li>HTML parser (Oliver Stoeneberg)</li>
  <li>XInclude performance problem reported by Kevin Ruscoe</li>
  <li>XML parser performance problem reported by Grant Goodale</li>
  <li>xmlSAXParseDTD() bug fix from Malcolm Tredinnick</li>
  <li>and a couple other cleanup</li>
</ul>

<h3>2.5.9: Aug 9 2003</h3>
<ul>
  <li>bugfixes: IPv6 portability, xmlHasNsProp (Markus Keim), Windows build
    (Wiliam Brake, Jesse Pelton, Igor), Schemas (Peter Sobisch), threading
    (Rob Richards), hexBinary type (), UTF-16 BOM (Dodji Seketeli),
    xmlReader, Relax-NG schemas compilation, namespace handling,  EXSLT (Sean
    Griffin), HTML parsing problem (William Brack), DTD validation for mixed
    content + namespaces, HTML serialization, library initialization,
    progressive HTML parser</li>
  <li>better interfaces for Relax-NG error handling (Joachim Bauch, )</li>
  <li>adding xmlXIncludeProcessTree() for XInclud'ing in a subtree</li>
  <li>doc fixes and improvements (John Fleck)</li>
  <li>configure flag for -with-fexceptions when embedding in C++</li>
  <li>couple of new UTF-8 helper functions (William Brack)</li>
  <li>general encoding cleanup + ISO-8859-x without iconv (Peter Jacobi)</li>
  <li>xmlTextReader cleanup + enum for node types (Bjorn Reese)</li>
  <li>general compilation/warning cleanup Solaris/HP-UX/... (William
  Brack)</li>
</ul>

<h3>2.5.8: Jul 6 2003</h3>
<ul>
  <li>bugfixes: XPath, XInclude, file/URI mapping, UTF-16 save (Mark
    Itzcovitz), UTF-8 checking, URI saving, error printing (William Brack),
    PI related memleak, compilation without schemas or without xpath (Joerg
    Schmitz-Linneweber/Garry Pennington), xmlUnlinkNode problem with DTDs,
    rpm problem on , i86_64, removed a few compilation problems from 2.5.7,
    xmlIOParseDTD, and xmlSAXParseDTD (Malcolm Tredinnick)</li>
  <li>portability: DJGPP (MsDos) , OpenVMS (Craig A. Berry)</li>
  <li>William Brack fixed multithreading lock problems</li>
  <li>IPv6 patch for FTP and HTTP accesses (Archana Shah/Wipro)</li>
  <li>Windows fixes (Igor Zlatkovic,  Eric Zurcher), threading (StÃ©phane
    Bidoul)</li>
  <li>A few W3C Schemas Structure improvements</li>
  <li>W3C Schemas Datatype improvements (Charlie Bozeman)</li>
  <li>Python bindings for thread globals (StÃ©phane Bidoul), and method/class
    generator</li>
  <li>added --nonet option to xmllint</li>
  <li>documentation improvements (John Fleck)</li>
</ul>

<h3>2.5.7: Apr 25 2003</h3>
<ul>
  <li>Relax-NG: Compiling to regexp and streaming validation on top of the
    xmlReader interface, added to xmllint --stream</li>
  <li>xmlReader: Expand(), Next() and DOM access glue, bug fixes</li>
  <li>Support for large files: RGN validated a 4.5GB instance</li>
  <li>Thread support is now configured in by default</li>
  <li>Fixes: update of the Trio code (Bjorn), WXS Date and Duration fixes
    (Charles Bozeman), DTD and namespaces (Brent Hendricks), HTML push parser
    and zero bytes handling, some missing Windows file path conversions,
    behaviour of the parser and validator in the presence of "out of memory"
    error conditions</li>
  <li>extended the API to be able to plug a garbage collecting memory
    allocator, added xmlMallocAtomic() and modified the allocations
    accordingly.</li>
  <li>Performances: removed excessive malloc() calls, speedup of the push and
    xmlReader interfaces, removed excessive thread locking</li>
  <li>Documentation: man page (John Fleck), xmlReader documentation</li>
  <li>Python: adding binding for xmlCatalogAddLocal (Brent M Hendricks)</li>
</ul>

<h3>2.5.6: Apr 1 2003</h3>
<ul>
  <li>Fixed W3C XML Schemas datatype, should be compliant now except for
    binHex and base64 which are not supported yet.</li>
  <li>bug fixes: non-ASCII IDs, HTML output, XInclude on large docs and
    XInclude entities handling, encoding detection on external subsets, XML
    Schemas bugs and memory leaks, HTML parser (James Bursa)</li>
  <li>portability: python/trio (Albert Chin), Sun compiler warnings</li>
  <li>documentation: added --relaxng option to xmllint man page (John)</li>
  <li>improved error reporting: xml:space, start/end tag mismatches, Relax NG
    errors</li>
</ul>

<h3>2.5.5: Mar 24 2003</h3>
<ul>
  <li>Lot of fixes on the Relax NG implementation. More testing including
    DocBook and TEI examples.</li>
  <li>Increased the support for W3C XML Schemas datatype</li>
  <li>Several bug fixes in the URI handling layer</li>
  <li>Bug fixes: HTML parser, xmlReader, DTD validation, XPath, encoding
    conversion, line counting in the parser.</li>
  <li>Added support for $XMLLINT_INDENT environment variable, FTP delete</li>
  <li>Fixed the RPM spec file name</li>
</ul>

<h3>2.5.4: Feb 20 2003</h3>
<ul>
  <li>Conformance testing and lot of fixes on Relax NG and XInclude
    implementation</li>
  <li>Implementation of XPointer element() scheme</li>
  <li>Bug fixes: XML parser, XInclude entities merge, validity checking on
    namespaces,
    <p>2 serialization bugs, node info generation problems, a DTD regexp
    generation problem.</p>
  </li>
  <li>Portability: windows updates and path canonicalization (Igor)</li>
  <li>A few typo fixes (Kjartan Maraas)</li>
  <li>Python bindings generator fixes (Stephane Bidoul)</li>
</ul>

<h3>2.5.3: Feb 10 2003</h3>
<ul>
  <li>RelaxNG and XML Schemas datatypes improvements, and added a first
    version of RelaxNG Python bindings</li>
  <li>Fixes: XLink (Sean Chittenden), XInclude (Sean Chittenden), API fix for
    serializing namespace nodes, encoding conversion bug, XHTML1
  serialization</li>
  <li>Portability fixes: Windows (Igor), AMD 64bits RPM spec file</li>
</ul>

<h3>2.5.2: Feb 5 2003</h3>
<ul>
  <li>First implementation of RelaxNG, added --relaxng flag to xmllint</li>
  <li>Schemas support now compiled in by default.</li>
  <li>Bug fixes: DTD validation, namespace checking, XInclude and entities,
    delegateURI in XML Catalogs, HTML parser, XML reader (StÃ©phane Bidoul),
    XPath parser and evaluation,  UTF8ToUTF8 serialization, XML reader memory
    consumption, HTML parser, HTML serialization in the presence of
  namespaces</li>
  <li>added an HTML API to check elements and attributes.</li>
  <li>Documentation improvement, PDF for the tutorial (John Fleck), doc
    patches (Stefan Kost)</li>
  <li>Portability fixes: NetBSD (Julio Merino), Windows (Igor Zlatkovic)</li>
  <li>Added python bindings for XPointer, contextual error reporting
    (StÃ©phane Bidoul)</li>
  <li>URI/file escaping problems (Stefano Zacchiroli)</li>
</ul>

<h3>2.5.1: Jan 8 2003</h3>
<ul>
  <li>Fixes a memory leak and configuration/compilation problems in 2.5.0</li>
  <li>documentation updates (John)</li>
  <li>a couple of XmlTextReader fixes</li>
</ul>

<h3>2.5.0: Jan 6 2003</h3>
<ul>
  <li>New <a href="xmlreader.html">XmltextReader interface</a> based on C#
    API (with help of StÃ©phane Bidoul)</li>
  <li>Windows: more exports, including the new API (Igor)</li>
  <li>XInclude fallback fix</li>
  <li>Python: bindings for the new API, packaging (StÃ©phane Bidoul),
    drv_libxml2.py Python xml.sax driver (StÃ©phane Bidoul), fixes, speedup
    and iterators for Python-2.2 (Hannu Krosing)</li>
  <li>Tutorial fixes (john Fleck and Niraj Tolia) xmllint man update
  (John)</li>
  <li>Fix an XML parser bug raised by Vyacheslav Pindyura</li>
  <li>Fix for VMS serialization (Nigel Hall) and config (Craig A. Berry)</li>
  <li>Entities handling fixes</li>
  <li>new API to optionally track node creation and deletion (Lukas
  Schroeder)</li>
  <li>Added documentation for the XmltextReader interface and some <a
    href="guidelines.html">XML guidelines</a></li>
</ul>

<h3>2.4.30: Dec 12 2002</h3>
<ul>
  <li>2.4.29 broke the python bindings, rereleasing</li>
  <li>Improvement/fixes of the XML API generator, and couple of minor code
    fixes.</li>
</ul>

<h3>2.4.29: Dec 11 2002</h3>
<ul>
  <li>Windows fixes (Igor): Windows CE port, pthread linking, python bindings
    (StÃ©phane Bidoul), Mingw (Magnus Henoch), and export list updates</li>
  <li>Fix for prev in python bindings (ERDI Gergo)</li>
  <li>Fix for entities handling (Marcus Clarke)</li>
  <li>Refactored the XML and HTML dumps to a single code path, fixed XHTML1
    dump</li>
  <li>Fix for URI parsing when handling URNs with fragment identifiers</li>
  <li>Fix for HTTP URL escaping problem</li>
  <li>added an TextXmlReader (C#) like API (work in progress)</li>
  <li>Rewrote the API in XML generation script, includes a C parser and saves
    more information needed for C# bindings</li>
</ul>

<h3>2.4.28: Nov 22 2002</h3>
<ul>
  <li>a couple of python binding fixes</li>
  <li>2 bug fixes in the XML push parser</li>
  <li>potential memory leak removed (Martin Stoilov)</li>
  <li>fix to the configure script for Unix (Dimitri Papadopoulos)</li>
  <li>added encoding support for XInclude parse="text"</li>
  <li>autodetection of XHTML1 and specific serialization rules added</li>
  <li>nasty threading bug fixed (William Brack)</li>
</ul>

<h3>2.4.27: Nov 17 2002</h3>
<ul>
  <li>fixes for the Python bindings</li>
  <li>a number of bug fixes: SGML catalogs, xmlParseBalancedChunkMemory(),
    HTML parser,  Schemas (Charles Bozeman), document fragment support
    (Christian Glahn), xmlReconciliateNs (Brian Stafford), XPointer,
    xmlFreeNode(), xmlSAXParseMemory (Peter Jones), xmlGetNodePath (Petr
    Pajas), entities processing</li>
  <li>added grep to xmllint --shell</li>
  <li>VMS update patch from Craig A. Berry</li>
  <li>cleanup of the Windows build with support for more compilers (Igor),
    better thread support on Windows</li>
  <li>cleanup of Unix Makefiles and spec file</li>
  <li>Improvements to the documentation (John Fleck)</li>
</ul>

<h3>2.4.26: Oct 18 2002</h3>
<ul>
  <li>Patches for Windows CE port, improvements on Windows paths handling</li>
  <li>Fixes to the validation  code (DTD and Schemas), xmlNodeGetPath() ,
    HTML serialization, Namespace compliance,  and a number of small
  problems</li>
</ul>

<h3>2.4.25: Sep 26 2002</h3>
<ul>
  <li>A number of bug fixes: XPath, validation, Python bindings, DOM and
    tree, xmlI/O,  Html</li>
  <li>Serious rewrite of XInclude</li>
  <li>Made XML Schemas regexp part of the default build and APIs, small fix
    and improvement of the regexp core</li>
  <li>Changed the validation code to reuse XML Schemas regexp APIs</li>
  <li>Better handling of Windows file paths, improvement of Makefiles (Igor,
    Daniel Gehriger, Mark Vakoc)</li>
  <li>Improved the python I/O bindings, the tests, added resolver and regexp
    APIs</li>
  <li>New logos from Marc Liyanage</li>
  <li>Tutorial improvements: John Fleck, Christopher Harris</li>
  <li>Makefile: Fixes for AMD x86_64 (Mandrake), DESTDIR (Christophe
  Merlet)</li>
  <li>removal of all stderr/perror use for error reporting</li>
  <li>Better error reporting: XPath and DTD validation</li>
  <li>update of the trio portability layer (Bjorn Reese)</li>
</ul>

<p><strong>2.4.24: Aug 22 2002</strong></p>
<ul>
  <li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
  <li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
    (fcrozat)</li>
  <li>HTML &lt;style&gt; and boolean attributes serializer fixes</li>
  <li>C14N improvements by Aleksey</li>
  <li>doc cleanups: Rick Jones</li>
  <li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
  <li>XInclude: implementation of fallback and xml:base fixup added</li>
</ul>

<h3>2.4.23: July 6 2002</h3>
<ul>
  <li>performances patches: Peter Jacobi</li>
  <li>c14n fixes, testsuite and performances: Aleksey Sanin</li>
  <li>added xmlDocFormatDump: Chema Celorio</li>
  <li>new tutorial: John Fleck</li>
  <li>new hash functions and performances: Sander Vesik, portability fix from
    Peter Jacobi</li>
  <li>a number of bug fixes: XPath (William Brack, Richard Jinks), XML and
    HTML parsers, ID lookup function</li>
  <li>removal of all remaining sprintf: Aleksey Sanin</li>
</ul>

<h3>2.4.22: May 27 2002</h3>
<ul>
  <li>a number of bug fixes: configure scripts, base handling, parser, memory
    usage, HTML parser, XPath, documentation (Christian Cornelssen),
    indentation, URI parsing</li>
  <li>Optimizations for XMLSec, fixing and making public some of the network
    protocol handlers (Aleksey)</li>
  <li>performance patch from Gary Pennington</li>
  <li>Charles Bozeman provided date and time support for XML Schemas
  datatypes</li>
</ul>

<h3>2.4.21: Apr 29 2002</h3>

<p>This release is both a bug fix release and also contains the early XML
Schemas <a href="http://www.w3.org/TR/xmlschema-1/">structures</a> and <a
href="http://www.w3.org/TR/xmlschema-2/">datatypes</a> code, beware, all
interfaces are likely to change, there is huge holes, it is clearly a work in
progress and don't even think of putting this code in a production system,
it's actually not compiled in by default. The real fixes are:
</p>

<ul>
  <li>a couple of bugs or limitations introduced in 2.4.20</li>
  <li>patches for Borland C++ and MSC by Igor</li>
  <li>some fixes on XPath strings and conformance patches by Richard
  Jinks</li>
  <li>patch from Aleksey for the ExcC14N specification</li>
  <li>OSF/1 bug fix by Bjorn</li>
</ul>

<h3>2.4.20: Apr 15 2002</h3>
<ul>
  <li>bug fixes: file descriptor leak, XPath, HTML output, DTD validation</li>
  <li>XPath conformance testing by Richard Jinks</li>
  <li>Portability fixes: Solaris, MPE/iX, Windows, OSF/1, python bindings,
    libxml.m4</li>
</ul>

<h3>2.4.19: Mar 25 2002</h3>
<ul>
  <li>bug fixes: half a dozen XPath bugs, Validation, ISO-Latin to UTF8
    encoder</li>
  <li>portability fixes in the HTTP code</li>
  <li>memory allocation checks using valgrind, and profiling tests</li>
  <li>revamp of the Windows build and Makefiles</li>
</ul>

<h3>2.4.18: Mar 18 2002</h3>
<ul>
  <li>bug fixes: tree, SAX, canonicalization, validation, portability,
  XPath</li>
  <li>removed the --with-buffer option it was becoming unmaintainable</li>
  <li>serious cleanup of the Python makefiles</li>
  <li>speedup patch to XPath very effective for DocBook stylesheets</li>
  <li>Fixes for Windows build, cleanup of the documentation</li>
</ul>

<h3>2.4.17: Mar 8 2002</h3>
<ul>
  <li>a lot of bug fixes, including "namespace nodes have no parents in
  XPath"</li>
  <li>fixed/improved the Python wrappers, added more examples and more
    regression tests, XPath extension functions can now return node-sets</li>
  <li>added the XML Canonicalization support from Aleksey Sanin</li>
</ul>

<h3>2.4.16: Feb 20 2002</h3>
<ul>
  <li>a lot of bug fixes, most of them were triggered by the XML Testsuite
    from OASIS and W3C. Compliance has been significantly improved.</li>
  <li>a couple of portability fixes too.</li>
</ul>

<h3>2.4.15: Feb 11 2002</h3>
<ul>
  <li>Fixed the Makefiles, especially the python module ones</li>
  <li>A few bug fixes and cleanup</li>
  <li>Includes cleanup</li>
</ul>

<h3>2.4.14: Feb 8 2002</h3>
<ul>
  <li>Change of License to the <a
    href="http://www.opensource.org/licenses/mit-license.html">MIT
    License</a> basically for integration in XFree86 codebase, and removing
    confusion around the previous dual-licensing</li>
  <li>added Python bindings, beta software but should already be quite
    complete</li>
  <li>a large number of fixes and cleanups, especially for all tree
    manipulations</li>
  <li>cleanup of the headers, generation of a reference API definition in
  XML</li>
</ul>

<h3>2.4.13: Jan 14 2002</h3>
<ul>
  <li>update of the documentation: John Fleck and Charlie Bozeman</li>
  <li>cleanup of timing code from Justin Fletcher</li>
  <li>fixes for Windows and initial thread support on Win32: Igor and Serguei
    Narojnyi</li>
  <li>Cygwin patch from Robert Collins</li>
  <li>added xmlSetEntityReferenceFunc() for Keith Isdale work on xsldbg</li>
</ul>

<h3>2.4.12: Dec 7 2001</h3>
<ul>
  <li>a few bug fixes: thread (Gary Pennington), xmllint (Geert Kloosterman),
    XML parser (Robin Berjon), XPointer (Danny Jamshy), I/O cleanups
  (robert)</li>
  <li>Eric Lavigne contributed project files for MacOS</li>
  <li>some makefiles cleanups</li>
</ul>

<h3>2.4.11: Nov 26 2001</h3>
<ul>
  <li>fixed a couple of errors in the includes, fixed a few bugs, some code
    cleanups</li>
  <li>xmllint man pages improvement by Heiko Rupp</li>
  <li>updated VMS build instructions from John A Fotheringham</li>
  <li>Windows Makefiles updates from Igor</li>
</ul>

<h3>2.4.10: Nov 10 2001</h3>
<ul>
  <li>URI escaping fix (Joel Young)</li>
  <li>added xmlGetNodePath() (for paths or XPointers generation)</li>
  <li>Fixes namespace handling problems when using DTD and validation</li>
  <li>improvements on xmllint: Morus Walter patches for --format and
    --encode, Stefan Kost and Heiko Rupp improvements on the --shell</li>
  <li>fixes for xmlcatalog linking pointed by Weiqi Gao</li>
  <li>fixes to the HTML parser</li>
</ul>

<h3>2.4.9: Nov 6 2001</h3>
<ul>
  <li>fixes more catalog bugs</li>
  <li>avoid a compilation problem, improve xmlGetLineNo()</li>
</ul>

<h3>2.4.8: Nov 4 2001</h3>
<ul>
  <li>fixed SGML catalogs broken in previous release, updated xmlcatalog
  tool</li>
  <li>fixed a compile errors and some includes troubles.</li>
</ul>

<h3>2.4.7: Oct 30 2001</h3>
<ul>
  <li>exported some debugging interfaces</li>
  <li>serious rewrite of the catalog code</li>
  <li>integrated Gary Pennington thread safety patch, added configure option
    and regression tests</li>
  <li>removed an HTML parser bug</li>
  <li>fixed a couple of potentially serious validation bugs</li>
  <li>integrated the SGML DocBook support in xmllint</li>
  <li>changed the nanoftp anonymous login passwd</li>
  <li>some I/O cleanup and a couple of interfaces for Perl wrapper</li>
  <li>general bug fixes</li>
  <li>updated xmllint man page by John Fleck</li>
  <li>some VMS and Windows updates</li>
</ul>

<h3>2.4.6: Oct 10 2001</h3>
<ul>
  <li>added an updated man pages by John Fleck</li>
  <li>portability and configure fixes</li>
  <li>an infinite loop on the HTML parser was removed (William)</li>
  <li>Windows makefile patches from Igor</li>
  <li>fixed half a dozen bugs reported for libxml or libxslt</li>
  <li>updated xmlcatalog to be able to modify SGML super catalogs</li>
</ul>

<h3>2.4.5: Sep 14 2001</h3>
<ul>
  <li>Remove a few annoying bugs in 2.4.4</li>
  <li>forces the HTML serializer to output decimal charrefs since some
    version of Netscape can't handle hexadecimal ones</li>
</ul>

<h3>1.8.16: Sep 14 2001</h3>
<ul>
  <li>maintenance release of the old libxml1 branch, couple of bug and
    portability fixes</li>
</ul>

<h3>2.4.4: Sep 12 2001</h3>
<ul>
  <li>added --convert to xmlcatalog, bug fixes and cleanups of XML
  Catalog</li>
  <li>a few bug fixes and some portability changes</li>
  <li>some documentation cleanups</li>
</ul>

<h3>2.4.3:  Aug 23 2001</h3>
<ul>
  <li>XML Catalog support see the doc</li>
  <li>New NaN/Infinity floating point code</li>
  <li>A few bug fixes</li>
</ul>

<h3>2.4.2:  Aug 15 2001</h3>
<ul>
  <li>adds xmlLineNumbersDefault() to control line number generation</li>
  <li>lot of bug fixes</li>
  <li>the Microsoft MSC projects files should now be up to date</li>
  <li>inheritance of namespaces from DTD defaulted attributes</li>
  <li>fixes a serious potential security bug</li>
  <li>added a --format option to xmllint</li>
</ul>

<h3>2.4.1:  July 24 2001</h3>
<ul>
  <li>possibility to keep line numbers in the tree</li>
  <li>some computation NaN fixes</li>
  <li>extension of the XPath API</li>
  <li>cleanup for alpha and ia64 targets</li>
  <li>patch to allow saving through HTTP PUT or POST</li>
</ul>

<h3>2.4.0: July 10 2001</h3>
<ul>
  <li>Fixed a few bugs in XPath, validation, and tree handling.</li>
  <li>Fixed XML Base implementation, added a couple of examples to the
    regression tests</li>
  <li>A bit of cleanup</li>
</ul>

<h3>2.3.14: July 5 2001</h3>
<ul>
  <li>fixed some entities problems and reduce memory requirement when
    substituting them</li>
  <li>lots of improvements in the XPath queries interpreter can be
    substantially faster</li>
  <li>Makefiles and configure cleanups</li>
  <li>Fixes to XPath variable eval, and compare on empty node set</li>
  <li>HTML tag closing bug fixed</li>
  <li>Fixed an URI reference computation problem when validating</li>
</ul>

<h3>2.3.13: June 28 2001</h3>
<ul>
  <li>2.3.12 configure.in was broken as well as the push mode XML parser</li>
  <li>a few more fixes for compilation on Windows MSC by Yon Derek</li>
</ul>

<h3>1.8.14: June 28 2001</h3>
<ul>
  <li>Zbigniew Chyla gave a patch to use the old XML parser in push mode</li>
  <li>Small Makefile fix</li>
</ul>

<h3>2.3.12: June 26 2001</h3>
<ul>
  <li>lots of cleanup</li>
  <li>a couple of validation fix</li>
  <li>fixed line number counting</li>
  <li>fixed serious problems in the XInclude processing</li>
  <li>added support for UTF8 BOM at beginning of entities</li>
  <li>fixed a strange gcc optimizer bugs in xpath handling of float, gcc-3.0
    miscompile uri.c (William), Thomas Leitner provided a fix for the
    optimizer on Tru64</li>
  <li>incorporated Yon Derek and Igor Zlatkovic  fixes and improvements for
    compilation on Windows MSC</li>
  <li>update of libxml-doc.el (Felix Natter)</li>
  <li>fixed 2 bugs in URI normalization code</li>
</ul>

<h3>2.3.11: June 17 2001</h3>
<ul>
  <li>updates to trio, Makefiles and configure should fix some portability
    problems (alpha)</li>
  <li>fixed some HTML serialization problems (pre, script, and block/inline
    handling), added encoding aware APIs, cleanup of this code</li>
  <li>added xmlHasNsProp()</li>
  <li>implemented a specific PI for encoding support in the DocBook SGML
    parser</li>
  <li>some XPath fixes (-Infinity, / as a function parameter and namespaces
    node selection)</li>
  <li>fixed a performance problem and an error in the validation code</li>
  <li>fixed XInclude routine to implement the recursive behaviour</li>
  <li>fixed xmlFreeNode problem when libxml is included statically twice</li>
  <li>added --version to xmllint for bug reports</li>
</ul>

<h3>2.3.10: June 1 2001</h3>
<ul>
  <li>fixed the SGML catalog support</li>
  <li>a number of reported bugs got fixed, in XPath, iconv detection,
    XInclude processing</li>
  <li>XPath string function should now handle unicode correctly</li>
</ul>

<h3>2.3.9: May 19 2001</h3>

<p>Lots of bugfixes, and added a basic SGML catalog support:
</p>
<ul>
  <li>HTML push bugfix #54891 and another patch from Jonas Borgstrom</li>
  <li>some serious speed optimization again</li>
  <li>some documentation cleanups</li>
  <li>trying to get better linking on Solaris (-R)</li>
  <li>XPath API cleanup from Thomas Broyer</li>
  <li>Validation bug fixed #54631, added a patch from Gary Pennington, fixed
    xmlValidGetValidElements()</li>
  <li>Added an INSTALL file</li>
  <li>Attribute removal added to API: #54433</li>
  <li>added a basic support for SGML catalogs</li>
  <li>fixed xmlKeepBlanksDefault(0) API</li>
  <li>bugfix in xmlNodeGetLang()</li>
  <li>fixed a small configure portability problem</li>
  <li>fixed an inversion of SYSTEM and PUBLIC identifier in HTML document</li>
</ul>

<h3>1.8.13: May 14 2001</h3>
<ul>
  <li>bugfixes release of the old libxml1 branch used by Gnome</li>
</ul>

<h3>2.3.8: May 3 2001</h3>
<ul>
  <li>Integrated an SGML DocBook parser for the Gnome project</li>
  <li>Fixed a few things in the HTML parser</li>
  <li>Fixed some XPath bugs raised by XSLT use, tried to fix the floating
    point portability issue</li>
  <li>Speed improvement (8M/s for SAX, 3M/s for DOM, 1.5M/s for
    DOM+validation using the XML REC as input and a 700MHz celeron).</li>
  <li>incorporated more Windows cleanup</li>
  <li>added xmlSaveFormatFile()</li>
  <li>fixed problems in copying nodes with entities references (gdome)</li>
  <li>removed some troubles surrounding the new validation module</li>
</ul>

<h3>2.3.7: April 22 2001</h3>
<ul>
  <li>lots of small bug fixes, corrected XPointer</li>
  <li>Non deterministic content model validation support</li>
  <li>added xmlDocCopyNode for gdome2</li>
  <li>revamped the way the HTML parser handles end of tags</li>
  <li>XPath: corrections of namespaces support and number formatting</li>
  <li>Windows: Igor Zlatkovic patches for MSC compilation</li>
  <li>HTML output fixes from P C Chow and William M. Brack</li>
  <li>Improved validation speed sensible for DocBook</li>
  <li>fixed a big bug with ID declared in external parsed entities</li>
  <li>portability fixes, update of Trio from Bjorn Reese</li>
</ul>

<h3>2.3.6: April 8 2001</h3>
<ul>
  <li>Code cleanup using extreme gcc compiler warning options, found and
    cleared half a dozen potential problem</li>
  <li>the Eazel team found an XML parser bug</li>
  <li>cleaned up the user of some of the string formatting function. used the
    trio library code to provide the one needed when the platform is missing
    them</li>
  <li>xpath: removed a memory leak and fixed the predicate evaluation
    problem, extended the testsuite and cleaned up the result. XPointer seems
    broken ...</li>
</ul>

<h3>2.3.5: Mar 23 2001</h3>
<ul>
  <li>Biggest change is separate parsing and evaluation of XPath expressions,
    there is some new APIs for this too</li>
  <li>included a number of bug fixes(XML push parser, 51876, notations,
  52299)</li>
  <li>Fixed some portability issues</li>
</ul>

<h3>2.3.4: Mar 10 2001</h3>
<ul>
  <li>Fixed bugs #51860 and #51861</li>
  <li>Added a global variable xmlDefaultBufferSize to allow default buffer
    size to be application tunable.</li>
  <li>Some cleanup in the validation code, still a bug left and this part
    should probably be rewritten to support ambiguous content model :-\</li>
  <li>Fix a couple of serious bugs introduced or raised by changes in 2.3.3
    parser</li>
  <li>Fixed another bug in xmlNodeGetContent()</li>
  <li>Bjorn fixed XPath node collection and Number formatting</li>
  <li>Fixed a loop reported in the HTML parsing</li>
  <li>blank space are reported even if the Dtd content model proves that they
    are formatting spaces, this is for XML conformance</li>
</ul>

<h3>2.3.3: Mar 1 2001</h3>
<ul>
  <li>small change in XPath for XSLT</li>
  <li>documentation cleanups</li>
  <li>fix in validation by Gary Pennington</li>
  <li>serious parsing performances improvements</li>
</ul>

<h3>2.3.2: Feb 24 2001</h3>
<ul>
  <li>chasing XPath bugs, found a bunch, completed some TODO</li>
  <li>fixed a Dtd parsing bug</li>
  <li>fixed a bug in xmlNodeGetContent</li>
  <li>ID/IDREF support partly rewritten by Gary Pennington</li>
</ul>

<h3>2.3.1: Feb 15 2001</h3>
<ul>
  <li>some XPath and HTML bug fixes for XSLT</li>
  <li>small extension of the hash table interfaces for DOM gdome2
    implementation</li>
  <li>A few bug fixes</li>
</ul>

<h3>2.3.0: Feb 8 2001 (2.2.12 was on 25 Jan but I didn't kept track)</h3>
<ul>
  <li>Lots of XPath bug fixes</li>
  <li>Add a mode with Dtd lookup but without validation error reporting for
    XSLT</li>
  <li>Add support for text node without escaping (XSLT)</li>
  <li>bug fixes for xmlCheckFilename</li>
  <li>validation code bug fixes from Gary Pennington</li>
  <li>Patch from Paul D. Smith correcting URI path normalization</li>
  <li>Patch to allow simultaneous install of libxml-devel and
  libxml2-devel</li>
  <li>the example Makefile is now fixed</li>
  <li>added HTML to the RPM packages</li>
  <li>tree copying bugfixes</li>
  <li>updates to Windows makefiles</li>
  <li>optimization patch from Bjorn Reese</li>
</ul>

<h3>2.2.11: Jan 4 2001</h3>
<ul>
  <li>bunch of bug fixes (memory I/O, xpath, ftp/http, ...)</li>
  <li>added htmlHandleOmittedElem()</li>
  <li>Applied Bjorn Reese's IPV6 first patch</li>
  <li>Applied Paul D. Smith patches for validation of XInclude results</li>
  <li>added XPointer xmlns() new scheme support</li>
</ul>

<h3>2.2.10: Nov 25 2000</h3>
<ul>
  <li>Fix the Windows problems of 2.2.8</li>
  <li>integrate OpenVMS patches</li>
  <li>better handling of some nasty HTML input</li>
  <li>Improved the XPointer implementation</li>
  <li>integrate a number of provided patches</li>
</ul>

<h3>2.2.9: Nov 25 2000</h3>
<ul>
  <li>erroneous release :-(</li>
</ul>

<h3>2.2.8: Nov 13 2000</h3>
<ul>
  <li>First version of <a href="http://www.w3.org/TR/xinclude">XInclude</a>
    support</li>
  <li>Patch in conditional section handling</li>
  <li>updated MS compiler project</li>
  <li>fixed some XPath problems</li>
  <li>added an URI escaping function</li>
  <li>some other bug fixes</li>
</ul>

<h3>2.2.7: Oct 31 2000</h3>
<ul>
  <li>added message redirection</li>
  <li>XPath improvements (thanks TOM !)</li>
  <li>xmlIOParseDTD() added</li>
  <li>various small fixes in the HTML, URI, HTTP and XPointer support</li>
  <li>some cleanup of the Makefile, autoconf and the distribution content</li>
</ul>

<h3>2.2.6: Oct 25 2000:</h3>
<ul>
  <li>Added an hash table module, migrated a number of internal structure to
    those</li>
  <li>Fixed a posteriori validation problems</li>
  <li>HTTP module cleanups</li>
  <li>HTML parser improvements (tag errors, script/style handling, attribute
    normalization)</li>
  <li>coalescing of adjacent text nodes</li>
  <li>couple of XPath bug fixes, exported the internal API</li>
</ul>

<h3>2.2.5: Oct 15 2000:</h3>
<ul>
  <li>XPointer implementation and testsuite</li>
  <li>Lot of XPath fixes, added variable and functions registration, more
    tests</li>
  <li>Portability fixes, lots of enhancements toward an easy Windows build
    and release</li>
  <li>Late validation fixes</li>
  <li>Integrated a lot of contributed patches</li>
  <li>added memory management docs</li>
  <li>a performance problem when using large buffer seems fixed</li>
</ul>

<h3>2.2.4: Oct 1 2000:</h3>
<ul>
  <li>main XPath problem fixed</li>
  <li>Integrated portability patches for Windows</li>
  <li>Serious bug fixes on the URI and HTML code</li>
</ul>

<h3>2.2.3: Sep 17 2000</h3>
<ul>
  <li>bug fixes</li>
  <li>cleanup of entity handling code</li>
  <li>overall review of all loops in the parsers, all sprintf usage has been
    checked too</li>
  <li>Far better handling of larges Dtd. Validating against DocBook XML Dtd
    works smoothly now.</li>
</ul>

<h3>1.8.10: Sep 6 2000</h3>
<ul>
  <li>bug fix release for some Gnome projects</li>
</ul>

<h3>2.2.2: August 12 2000</h3>
<ul>
  <li>mostly bug fixes</li>
  <li>started adding routines to access xml parser context options</li>
</ul>

<h3>2.2.1: July 21 2000</h3>
<ul>
  <li>a purely bug fixes release</li>
  <li>fixed an encoding support problem when parsing from a memory block</li>
  <li>fixed a DOCTYPE parsing problem</li>
  <li>removed a bug in the function allowing to override the memory
    allocation routines</li>
</ul>

<h3>2.2.0: July 14 2000</h3>
<ul>
  <li>applied a lot of portability fixes</li>
  <li>better encoding support/cleanup and saving (content is now always
    encoded in UTF-8)</li>
  <li>the HTML parser now correctly handles encodings</li>
  <li>added xmlHasProp()</li>
  <li>fixed a serious problem with &amp;#38;</li>
  <li>propagated the fix to FTP client</li>
  <li>cleanup, bugfixes, etc ...</li>
  <li>Added a page about <a href="encoding.html">libxml Internationalization
    support</a></li>
</ul>

<h3>1.8.9:  July 9 2000</h3>
<ul>
  <li>fixed the spec the RPMs should be better</li>
  <li>fixed a serious bug in the FTP implementation, released 1.8.9 to solve
    rpmfind users problem</li>
</ul>

<h3>2.1.1: July 1 2000</h3>
<ul>
  <li>fixes a couple of bugs in the 2.1.0 packaging</li>
  <li>improvements on the HTML parser</li>
</ul>

<h3>2.1.0 and 1.8.8: June 29 2000</h3>
<ul>
  <li>1.8.8 is mostly a commodity package for upgrading to libxml2 according
    to <a href="upgrade.html">new instructions</a>. It fixes a nasty problem
    about &amp;#38; charref parsing</li>
  <li>2.1.0 also ease the upgrade from libxml v1 to the recent version. it
    also contains numerous fixes and enhancements:
    <ul>
      <li>added xmlStopParser() to stop parsing</li>
      <li>improved a lot parsing speed when there is large CDATA blocks</li>
      <li>includes XPath patches provided by Picdar Technology</li>
      <li>tried to fix as much as possible DTD validation and namespace
        related problems</li>
      <li>output to a given encoding has been added/tested</li>
      <li>lot of various fixes</li>
    </ul>
  </li>
</ul>

<h3>2.0.0: Apr 12 2000</h3>
<ul>
  <li>First public release of libxml2. If you are using libxml, it's a good
    idea to check the 1.x to 2.x upgrade instructions. NOTE: while initially
    scheduled for Apr 3 the release occurred only on Apr 12 due to massive
    workload.</li>
  <li>The include are now located under $prefix/include/libxml (instead of
    $prefix/include/gnome-xml), they also are referenced by
    <pre>#include &lt;libxml/xxx.h&gt;</pre>
    <p>instead of</p>
    <pre>#include "xxx.h"</pre>
  </li>
  <li>a new URI module for parsing URIs and following strictly RFC 2396</li>
  <li>the memory allocation routines used by libxml can now be overloaded
    dynamically by using xmlMemSetup()</li>
  <li>The previously CVS only tool tester has been renamed
    <strong>xmllint</strong> and is now installed as part of the libxml2
    package</li>
  <li>The I/O interface has been revamped. There is now ways to plug in
    specific I/O modules, either at the URI scheme detection level using
    xmlRegisterInputCallbacks()  or by passing I/O functions when creating a
    parser context using xmlCreateIOParserCtxt()</li>
  <li>there is a C preprocessor macro LIBXML_VERSION providing the version
    number of the libxml module in use</li>
  <li>a number of optional features of libxml can now be excluded at
    configure time (FTP/HTTP/HTML/XPath/Debug)</li>
</ul>

<h3>2.0.0beta: Mar 14 2000</h3>
<ul>
  <li>This is a first Beta release of libxml version 2</li>
  <li>It's available only from<a href="ftp://xmlsoft.org/libxml2/">xmlsoft.org
    FTP</a>, it's packaged as libxml2-2.0.0beta and available as tar and
  RPMs</li>
  <li>This version is now the head in the Gnome CVS base, the old one is
    available under the tag LIB_XML_1_X</li>
  <li>This includes a very large set of changes. From a  programmatic point
    of view applications should not have to be modified too much, check the
    <a href="upgrade.html">upgrade page</a></li>
  <li>Some interfaces may changes (especially a bit about encoding).</li>
  <li>the updates includes:
    <ul>
      <li>fix I18N support. ISO-Latin-x/UTF-8/UTF-16 (nearly) seems correctly
        handled now</li>
      <li>Better handling of entities, especially well-formedness checking
        and proper PEref extensions in external subsets</li>
      <li>DTD conditional sections</li>
      <li>Validation now correctly handle entities content</li>
      <li><a href="http://rpmfind.net/tools/gdome/messages/0039.html">change
        structures to accommodate DOM</a></li>
    </ul>
  </li>
  <li>Serious progress were made toward compliance, <a
    href="conf/result.html">here are the result of the test</a> against the
    OASIS testsuite (except the Japanese tests since I don't support that
    encoding yet). This URL is rebuilt every couple of hours using the CVS
    head version.</li>
</ul>

<h3>1.8.7: Mar 6 2000</h3>
<ul>
  <li>This is a bug fix release:</li>
  <li>It is possible to disable the ignorable blanks heuristic used by
    libxml-1.x, a new function  xmlKeepBlanksDefault(0) will allow this. Note
    that for adherence to XML spec, this behaviour will be disabled by
    default in 2.x . The same function will allow to keep compatibility for
    old code.</li>
  <li>Blanks in &lt;a&gt;  &lt;/a&gt; constructs are not ignored anymore,
    avoiding heuristic is really the Right Way :-\</li>
  <li>The unchecked use of snprintf which was breaking libxml-1.8.6
    compilation on some platforms has been fixed</li>
  <li>nanoftp.c nanohttp.c: Fixed '#' and '?' stripping when processing
  URIs</li>
</ul>

<h3>1.8.6: Jan 31 2000</h3>
<ul>
  <li>added a nanoFTP transport module, debugged until the new version of <a
    href="http://rpmfind.net/linux/rpm2html/rpmfind.html">rpmfind</a> can use
    it without troubles</li>
</ul>

<h3>1.8.5: Jan 21 2000</h3>
<ul>
  <li>adding APIs to parse a well balanced chunk of XML (production <a
    href="http://www.w3.org/TR/REC-xml#NT-content">[43] content</a> of the
    XML spec)</li>
  <li>fixed a hideous bug in xmlGetProp pointed by Rune.Djurhuus@fast.no</li>
  <li>Jody Goldberg &lt;jgoldberg@home.com&gt; provided another patch trying
    to solve the zlib checks problems</li>
  <li>The current state in gnome CVS base is expected to ship as 1.8.5 with
    gnumeric soon</li>
</ul>

<h3>1.8.4: Jan 13 2000</h3>
<ul>
  <li>bug fixes, reintroduced xmlNewGlobalNs(), fixed xmlNewNs()</li>
  <li>all exit() call should have been removed from libxml</li>
  <li>fixed a problem with INCLUDE_WINSOCK on WIN32 platform</li>
  <li>added newDocFragment()</li>
</ul>

<h3>1.8.3: Jan 5 2000</h3>
<ul>
  <li>a Push interface for the XML and HTML parsers</li>
  <li>a shell-like interface to the document tree (try tester --shell :-)</li>
  <li>lots of bug fixes and improvement added over XMas holidays</li>
  <li>fixed the DTD parsing code to work with the xhtml DTD</li>
  <li>added xmlRemoveProp(), xmlRemoveID() and xmlRemoveRef()</li>
  <li>Fixed bugs in xmlNewNs()</li>
  <li>External entity loading code has been revamped, now it uses
    xmlLoadExternalEntity(), some fix on entities processing were added</li>
  <li>cleaned up WIN32 includes of socket stuff</li>
</ul>

<h3>1.8.2: Dec 21 1999</h3>
<ul>
  <li>I got another problem with includes and C++, I hope this issue is fixed
    for good this time</li>
  <li>Added a few tree modification functions: xmlReplaceNode,
    xmlAddPrevSibling, xmlAddNextSibling, xmlNodeSetName and
    xmlDocSetRootElement</li>
  <li>Tried to improve the HTML output with help from <a
    href="mailto:clahey@umich.edu">Chris Lahey</a></li>
</ul>

<h3>1.8.1: Dec 18 1999</h3>
<ul>
  <li>various patches to avoid troubles when using libxml with C++ compilers
    the "namespace" keyword and C escaping in include files</li>
  <li>a problem in one of the core macros IS_CHAR was corrected</li>
  <li>fixed a bug introduced in 1.8.0 breaking default namespace processing,
    and more specifically the Dia application</li>
  <li>fixed a posteriori validation (validation after parsing, or by using a
    Dtd not specified in the original document)</li>
  <li>fixed a bug in</li>
</ul>

<h3>1.8.0: Dec 12 1999</h3>
<ul>
  <li>cleanup, especially memory wise</li>
  <li>the parser should be more reliable, especially the HTML one, it should
    not crash, whatever the input !</li>
  <li>Integrated various patches, especially a speedup improvement for large
    dataset from <a href="mailto:cnygard@bellatlantic.net">Carl Nygard</a>,
    configure with --with-buffers to enable them.</li>
  <li>attribute normalization, oops should have been added long ago !</li>
  <li>attributes defaulted from DTDs should be available, xmlSetProp() now
    does entities escaping by default.</li>
</ul>

<h3>1.7.4: Oct 25 1999</h3>
<ul>
  <li>Lots of HTML improvement</li>
  <li>Fixed some errors when saving both XML and HTML</li>
  <li>More examples, the regression tests should now look clean</li>
  <li>Fixed a bug with contiguous charref</li>
</ul>

<h3>1.7.3: Sep 29 1999</h3>
<ul>
  <li>portability problems fixed</li>
  <li>snprintf was used unconditionally, leading to link problems on system
    were it's not available, fixed</li>
</ul>

<h3>1.7.1: Sep 24 1999</h3>
<ul>
  <li>The basic type for strings manipulated by libxml has been renamed in
    1.7.1 from <strong>CHAR</strong> to <strong>xmlChar</strong>. The reason
    is that CHAR was conflicting with a predefined type on Windows. However
    on non WIN32 environment, compatibility is provided by the way of  a
    <strong>#define </strong>.</li>
  <li>Changed another error : the use of a structure field called errno, and
    leading to troubles on platforms where it's a macro</li>
</ul>

<h3>1.7.0: Sep 23 1999</h3>
<ul>
  <li>Added the ability to fetch remote DTD or parsed entities, see the <a
    href="html/libxml-nanohttp.html">nanohttp</a> module.</li>
  <li>Added an errno to report errors by another mean than a simple printf
    like callback</li>
  <li>Finished ID/IDREF support and checking when validation</li>
  <li>Serious memory leaks fixed (there is now a <a
    href="html/libxml-xmlmemory.html">memory wrapper</a> module)</li>
  <li>Improvement of <a href="http://www.w3.org/TR/xpath">XPath</a>
    implementation</li>
  <li>Added an HTML parser front-end</li>
</ul>

<h2><a name="XML">XML</a></h2>

<p><a href="http://www.w3.org/TR/REC-xml">XML is a standard</a> for
markup-based structured documents. Here is <a name="example">an example XML
document</a>:</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;EXAMPLE prop1="gnome is great" prop2="&amp;amp; linux too"&gt;
  &lt;head&gt;
   &lt;title&gt;Welcome to Gnome&lt;/title&gt;
  &lt;/head&gt;
  &lt;chapter&gt;
   &lt;title&gt;The Linux adventure&lt;/title&gt;
   &lt;p&gt;bla bla bla ...&lt;/p&gt;
   &lt;image href="linus.gif"/&gt;
   &lt;p&gt;...&lt;/p&gt;
  &lt;/chapter&gt;
&lt;/EXAMPLE&gt;</pre>

<p>The first line specifies that it is an XML document and gives useful
information about its encoding.  Then the rest of the document is a text
format whose structure is specified by tags between brackets. <strong>Each
tag opened has to be closed</strong>. XML is pedantic about this. However, if
a tag is empty (no content), a single tag can serve as both the opening and
closing tag if it ends with <code>/&gt;</code> rather than with
<code>&gt;</code>. Note that, for example, the image tag has no content (just
an attribute) and is closed by ending the tag with <code>/&gt;</code>.</p>

<p>XML can be applied successfully to a wide range of tasks, ranging from
long term structured document maintenance (where it follows the steps of
SGML) to simple data encoding mechanisms like configuration file formatting
(glade), spreadsheets (gnumeric), or even shorter lived documents such as
WebDAV where it is used to encode remote calls between a client and a
server.</p>

<h2><a name="XSLT">XSLT</a></h2>

<p>Check <a href="http://xmlsoft.org/XSLT">the separate libxslt page</a></p>

<p><a href="http://www.w3.org/TR/xslt">XSL Transformations</a>,  is a
language for transforming XML documents into other XML documents (or
HTML/textual output).</p>

<p>A separate library called libxslt is available implementing XSLT-1.0 for
libxml2. This module "libxslt" too can be found in the Gnome SVN base.</p>

<p>You can check the progresses on the libxslt <a
href="http://xmlsoft.org/XSLT/ChangeLog.html">Changelog</a>.</p>

<h2><a name="Python">Python and bindings</a></h2>

<p>There are a number of language bindings and wrappers available for
libxml2, the list below is not exhaustive. Please contact the <a
href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
(<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
order to get updates to this list or to discuss the specific topic of libxml2
or libxslt wrappers or bindings:</p>
<ul>
  <li><a href="http://libxmlplusplus.sourceforge.net/">Libxml++</a> seems the
    most up-to-date C++ bindings for libxml2, check the <a
    href="http://libxmlplusplus.sourceforge.net/reference/html/hierarchy.html">documentation</a>
    and the <a
    href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/libxmlplusplus/libxml%2b%2b/examples/">examples</a>.</li>
  <li>There is another <a href="http://libgdome-cpp.berlios.de/">C++ wrapper
    based on the gdome2 bindings</a> maintained by Tobias Peters.</li>
  <li>and a third C++ wrapper by Peter Jones &lt;pjones@pmade.org&gt;
    <p>Website: <a
    href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p>
  </li>
  <li>XML::LibXML <a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl
      bindings</a> are available on CPAN, as well as XML::LibXSLT
      <a href="http://cpan.uwinnipeg.ca/dist/XML-LibXSLT">Perl libxslt
      bindings</a>.</li>
  <li>If you're interested into scripting XML processing, have a look at <a
    href="http://xsh.sourceforge.net/">XSH</a> an XML editing shell based on
    Libxml2 Perl bindings.</li>
  <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provides an
    earlier version of the libxml/libxslt <a
    href="http://www.rexx.com/~dkuhlman">wrappers for Python</a>.</li>
  <li>Gopal.V and Peter Minten develop <a
    href="http://savannah.gnu.org/projects/libxmlsharp">libxml#</a>, a set of
    C# libxml2 bindings.</li>
  <li>Petr Kozelka provides <a
    href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
    libxml2</a> with Kylix, Delphi and other Pascal compilers.</li>
  <li>Uwe Fechner also provides <a
    href="http://sourceforge.net/projects/idom2-pas/">idom2</a>, a DOM2
    implementation for Kylix2/D5/D6 from Borland.</li>
  <li>There is <a href="http://libxml.rubyforge.org/">bindings for Ruby</a> 
    and libxml2 bindings are also available in Ruby through the <a
    href="http://libgdome-ruby.berlios.de/">libgdome-ruby</a> module
    maintained by Tobias Peters.</li>
  <li>Steve Ball and contributors maintains <a
    href="http://tclxml.sourceforge.net/">libxml2 and libxslt bindings for
    Tcl</a>.</li>
  <li>libxml2 and libxslt are the default XML libraries for PHP5.</li>
  <li><a href="http://savannah.gnu.org/projects/classpathx/">LibxmlJ</a> is
    an effort to create a 100% JAXP-compatible Java wrapper for libxml2 and
    libxslt as part of GNU ClasspathX project.</li>
  <li>Patrick McPhee provides Rexx bindings for libxml2 and libxslt, look for
    <a href="http://www.interlog.com/~ptjm/software.html">RexxXML</a>.</li>
  <li><a
    href="http://www.satimage.fr/software/en/xml_suite.html">Satimage</a>
    provides <a
    href="http://www.satimage.fr/software/en/downloads_osaxen.html">XMLLib
    osax</a>. This is an osax for Mac OS X with a set of commands to
    implement in AppleScript the XML DOM, XPATH and XSLT. Also includes
    commands for Property-lists (Apple's fast lookup table XML format.)</li>
  <li>Francesco Montorsi developed <a
    href="https://sourceforge.net/project/showfiles.php?group_id=51305&amp;package_id=45182">wxXml2</a>
    wrappers that interface libxml2, allowing wxWidgets applications to
    load/save/edit XML instances.</li>
</ul>

<p>The distribution includes a set of Python bindings, which are guaranteed
to be maintained as part of the library in the future, though the Python
interface have not yet reached the completeness of the C API.</p>

<p>Note that some of the Python purist dislike the default set of Python
bindings, rather than complaining I suggest they have a look at <a
href="http://lxml.de/">lxml the more pythonic bindings for libxml2
and libxslt</a> and <a
href="http://lxml.de/mailinglist/">check the mailing-list</a>.</p>

<p><a href="mailto:stephane.bidoul@softwareag.com">StÃ©phane Bidoul</a>
maintains <a href="http://users.skynet.be/sbi/libxml-python/">a Windows port
of the Python bindings</a>.</p>

<p>Note to people interested in building bindings, the API is formalized as
<a href="libxml2-api.xml">an XML API description file</a> which allows to
automate a large part of the Python bindings, this includes function
descriptions, enums, structures, typedefs, etc... The Python script used to
build the bindings is python/generator.py in the source distribution.</p>

<p>To install the Python bindings there are 2 options:</p>
<ul>
  <li>If you use an RPM based distribution, simply install the <a
    href="http://rpmfind.net/linux/rpm2html/search.php?query=libxml2-python">libxml2-python
    RPM</a> (and if needed the <a
    href="http://rpmfind.net/linux/rpm2html/search.php?query=libxslt-python">libxslt-python
    RPM</a>).</li>
  <li>Otherwise use the <a href="ftp://xmlsoft.org/libxml2/python/">libxml2-python
    module distribution</a> corresponding to your installed version of
    libxml2 and libxslt. Note that to install it you will need both libxml2
    and libxslt installed and run "python setup.py build install" in the
    module tree.</li>
</ul>

<p>The distribution includes a set of examples and regression tests for the
python bindings in the <code>python/tests</code> directory. Here are some
excerpts from those tests:</p>

<h3>tst.py:</h3>

<p>This is a basic test of the file interface and DOM navigation:</p>
<pre>import libxml2, sys

doc = libxml2.parseFile("tst.xml")
if doc.name != "tst.xml":
    print "doc.name failed"
    sys.exit(1)
root = doc.children
if root.name != "doc":
    print "root.name failed"
    sys.exit(1)
child = root.children
if child.name != "foo":
    print "child.name failed"
    sys.exit(1)
doc.freeDoc()</pre>

<p>The Python module is called libxml2; parseFile is the equivalent of
xmlParseFile (most of the bindings are automatically generated, and the xml
prefix is removed and the casing convention are kept). All node seen at the
binding level share the same subset of accessors:</p>
<ul>
  <li><code>name</code> : returns the node name</li>
  <li><code>type</code> : returns a string indicating the node type</li>
  <li><code>content</code> : returns the content of the node, it is based on
    xmlNodeGetContent() and hence is recursive.</li>
  <li><code>parent</code> , <code>children</code>, <code>last</code>,
    <code>next</code>, <code>prev</code>, <code>doc</code>,
    <code>properties</code>: pointing to the associated element in the tree,
    those may return None in case no such link exists.</li>
</ul>

<p>Also note the need to explicitly deallocate documents with freeDoc() .
Reference counting for libxml2 trees would need quite a lot of work to
function properly, and rather than risk memory leaks if not implemented
correctly it sounds safer to have an explicit function to free a tree. The
wrapper python objects like doc, root or child are them automatically garbage
collected.</p>

<h3>validate.py:</h3>

<p>This test check the validation interfaces and redirection of error
messages:</p>
<pre>import libxml2

#deactivate error messages from the validation
def noerr(ctx, str):
    pass

libxml2.registerErrorHandler(noerr, None)

ctxt = libxml2.createFileParserCtxt("invalid.xml")
ctxt.validate(1)
ctxt.parseDocument()
doc = ctxt.doc()
valid = ctxt.isValid()
doc.freeDoc()
if valid != 0:
    print "validity check failed"</pre>

<p>The first thing to notice is the call to registerErrorHandler(), it
defines a new error handler global to the library. It is used to avoid seeing
the error messages when trying to validate the invalid document.</p>

<p>The main interest of that test is the creation of a parser context with
createFileParserCtxt() and how the behaviour can be changed before calling
parseDocument() . Similarly the information resulting from the parsing phase
is also available using context methods.</p>

<p>Contexts like nodes are defined as class and the libxml2 wrappers maps the
C function interfaces in terms of objects method as much as possible. The
best to get a complete view of what methods are supported is to look at the
libxml2.py module containing all the wrappers.</p>

<h3>push.py:</h3>

<p>This test show how to activate the push parser interface:</p>
<pre>import libxml2

ctxt = libxml2.createPushParser(None, "&lt;foo", 4, "test.xml")
ctxt.parseChunk("/&gt;", 2, 1)
doc = ctxt.doc()

doc.freeDoc()</pre>

<p>The context is created with a special call based on the
xmlCreatePushParser() from the C library. The first argument is an optional
SAX callback object, then the initial set of data, the length and the name of
the resource in case URI-References need to be computed by the parser.</p>

<p>Then the data are pushed using the parseChunk() method, the last call
setting the third argument terminate to 1.</p>

<h3>pushSAX.py:</h3>

<p>this test show the use of the event based parsing interfaces. In this case
the parser does not build a document, but provides callback information as
the parser makes progresses analyzing the data being provided:</p>
<pre>import libxml2
log = ""

class callback:
    def startDocument(self):
        global log
        log = log + "startDocument:"

    def endDocument(self):
        global log
        log = log + "endDocument:"

    def startElement(self, tag, attrs):
        global log
        log = log + "startElement %s %s:" % (tag, attrs)

    def endElement(self, tag):
        global log
        log = log + "endElement %s:" % (tag)

    def characters(self, data):
        global log
        log = log + "characters: %s:" % (data)

    def warning(self, msg):
        global log
        log = log + "warning: %s:" % (msg)

    def error(self, msg):
        global log
        log = log + "error: %s:" % (msg)

    def fatalError(self, msg):
        global log
        log = log + "fatalError: %s:" % (msg)

handler = callback()

ctxt = libxml2.createPushParser(handler, "&lt;foo", 4, "test.xml")
chunk = " url='tst'&gt;b"
ctxt.parseChunk(chunk, len(chunk), 0)
chunk = "ar&lt;/foo&gt;"
ctxt.parseChunk(chunk, len(chunk), 1)

reference = "startDocument:startElement foo {'url': 'tst'}:" + \ 
            "characters: bar:endElement foo:endDocument:"
if log != reference:
    print "Error got: %s" % log
    print "Expected: %s" % reference</pre>

<p>The key object in that test is the handler, it provides a number of entry
points which can be called by the parser as it makes progresses to indicate
the information set obtained. The full set of callback is larger than what
the callback class in that specific example implements (see the SAX
definition for a complete list). The wrapper will only call those supplied by
the object when activated. The startElement receives the names of the element
and a dictionary containing the attributes carried by this element.</p>

<p>Also note that the reference string generated from the callback shows a
single character call even though the string "bar" is passed to the parser
from 2 different call to parseChunk()</p>

<h3>xpath.py:</h3>

<p>This is a basic test of XPath wrappers support</p>
<pre>import libxml2

doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
res = ctxt.xpathEval("//*")
if len(res) != 2:
    print "xpath query: wrong node set size"
    sys.exit(1)
if res[0].name != "doc" or res[1].name != "foo":
    print "xpath query: wrong node set value"
    sys.exit(1)
doc.freeDoc()
ctxt.xpathFreeContext()</pre>

<p>This test parses a file, then create an XPath context to evaluate XPath
expression on it. The xpathEval() method execute an XPath query and returns
the result mapped in a Python way. String and numbers are natively converted,
and node sets are returned as a tuple of libxml2 Python nodes wrappers. Like
the document, the XPath context need to be freed explicitly, also not that
the result of the XPath query may point back to the document tree and hence
the document must be freed after the result of the query is used.</p>

<h3>xpathext.py:</h3>

<p>This test shows how to extend the XPath engine with functions written in
python:</p>
<pre>import libxml2

def foo(ctx, x):
    return x + 1

doc = libxml2.parseFile("tst.xml")
ctxt = doc.xpathNewContext()
libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
res = ctxt.xpathEval("foo(1)")
if res != 2:
    print "xpath extension failure"
doc.freeDoc()
ctxt.xpathFreeContext()</pre>

<p>Note how the extension function is registered with the context (but that
part is not yet finalized, this may change slightly in the future).</p>

<h3>tstxpath.py:</h3>

<p>This test is similar to the previous one but shows how the extension
function can access the XPath evaluation context:</p>
<pre>def foo(ctx, x):
    global called

    #
    # test that access to the XPath evaluation contexts
    #
    pctxt = libxml2.xpathParserContext(_obj=ctx)
    ctxt = pctxt.context()
    called = ctxt.function()
    return x + 1</pre>

<p>All the interfaces around the XPath parser(or rather evaluation) context
are not finalized, but it should be sufficient to do contextual work at the
evaluation point.</p>

<h3>Memory debugging:</h3>

<p>last but not least, all tests starts with the following prologue:</p>
<pre>#memory debug specific
libxml2.debugMemory(1)</pre>

<p>and ends with the following epilogue:</p>
<pre>#memory debug specific
libxml2.cleanupParser()
if libxml2.debugMemory(1) == 0:
    print "OK"
else:
    print "Memory leak %d bytes" % (libxml2.debugMemory(1))
    libxml2.dumpMemory()</pre>

<p>Those activate the memory debugging interface of libxml2 where all
allocated block in the library are tracked. The prologue then cleans up the
library state and checks that all allocated memory has been freed. If not it
calls dumpMemory() which saves that list in a <code>.memdump</code> file.</p>

<h2><a name="architecture">libxml2 architecture</a></h2>

<p>Libxml2 is made of multiple components; some of them are optional, and
most of the block interfaces are public. The main components are:</p>
<ul>
  <li>an Input/Output layer</li>
  <li>FTP and HTTP client layers (optional)</li>
  <li>an Internationalization layer managing the encodings support</li>
  <li>a URI module</li>
  <li>the XML parser and its basic SAX interface</li>
  <li>an HTML parser using the same SAX interface (optional)</li>
  <li>a SAX tree module to build an in-memory DOM representation</li>
  <li>a tree module to manipulate the DOM representation</li>
  <li>a validation module using the DOM representation (optional)</li>
  <li>an XPath module for global lookup in a DOM representation
  (optional)</li>
  <li>a debug module (optional)</li>
</ul>

<p>Graphically this gives the following:</p>

<p><img src="libxml.gif" alt="a graphical view of the various"></p>

<p></p>

<h2><a name="tree">The tree output</a></h2>

<p>The parser returns a tree built during the document analysis. The value
returned is an <strong>xmlDocPtr</strong> (i.e., a pointer to an
<strong>xmlDoc</strong> structure). This structure contains information such
as the file name, the document type, and a <strong>children</strong> pointer
which is the root of the document (or more exactly the first child under the
root which is the document). The tree is made of <strong>xmlNode</strong>s,
chained in double-linked lists of siblings and with a children&lt;-&gt;parent
relationship. An xmlNode can also carry properties (a chain of xmlAttr
structures). An attribute may have a value which is a list of TEXT or
ENTITY_REF nodes.</p>

<p>Here is an example (erroneous with respect to the XML spec since there
should be only one ELEMENT under the root):</p>

<p><img src="structure.gif" alt=" structure.gif "></p>

<p>In the source package there is a small program (not installed by default)
called <strong>xmllint</strong> which parses XML files given as argument and
prints them back as parsed. This is useful for detecting errors both in XML
code and in the XML parser itself. It has an option <strong>--debug</strong>
which prints the actual in-memory structure of the document; here is the
result with the <a href="#example">example</a> given before:</p>
<pre>DOCUMENT
version=1.0
standalone=true
  ELEMENT EXAMPLE
    ATTRIBUTE prop1
      TEXT
      content=gnome is great
    ATTRIBUTE prop2
      ENTITY_REF
      TEXT
      content= linux too 
    ELEMENT head
      ELEMENT title
        TEXT
        content=Welcome to Gnome
    ELEMENT chapter
      ELEMENT title
        TEXT
        content=The Linux adventure
      ELEMENT p
        TEXT
        content=bla bla bla ...
      ELEMENT image
        ATTRIBUTE href
          TEXT
          content=linus.gif
      ELEMENT p
        TEXT
        content=...</pre>

<p>This should be useful for learning the internal representation model.</p>

<h2><a name="interface">The SAX interface</a></h2>

<p>Sometimes the DOM tree output is just too large to fit reasonably into
memory. In that case (and if you don't expect to save back the XML document
loaded using libxml), it's better to use the SAX interface of libxml. SAX is
a <strong>callback-based interface</strong> to the parser. Before parsing,
the application layer registers a customized set of callbacks which are
called by the library as it progresses through the XML input.</p>

<p>To get more detailed step-by-step guidance on using the SAX interface of
libxml, see the <a
href="http://www.jamesh.id.au/articles/libxml-sax/libxml-sax.html">nice
documentation</a>.written by <a href="mailto:james@daa.com.au">James
Henstridge</a>.</p>

<p>You can debug the SAX behaviour by using the <strong>testSAX</strong>
program located in the gnome-xml module (it's usually not shipped in the
binary packages of libxml, but you can find it in the tar source
distribution). Here is the sequence of callbacks that would be reported by
testSAX when parsing the example XML document shown earlier:</p>
<pre>SAX.setDocumentLocator()
SAX.startDocument()
SAX.getEntity(amp)
SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&amp;amp; linux too')
SAX.characters(   , 3)
SAX.startElement(head)
SAX.characters(    , 4)
SAX.startElement(title)
SAX.characters(Welcome to Gnome, 16)
SAX.endElement(title)
SAX.characters(   , 3)
SAX.endElement(head)
SAX.characters(   , 3)
SAX.startElement(chapter)
SAX.characters(    , 4)
SAX.startElement(title)
SAX.characters(The Linux adventure, 19)
SAX.endElement(title)
SAX.characters(    , 4)
SAX.startElement(p)
SAX.characters(bla bla bla ..., 15)
SAX.endElement(p)
SAX.characters(    , 4)
SAX.startElement(image, href='linus.gif')
SAX.endElement(image)
SAX.characters(    , 4)
SAX.startElement(p)
SAX.characters(..., 3)
SAX.endElement(p)
SAX.characters(   , 3)
SAX.endElement(chapter)
SAX.characters( , 1)
SAX.endElement(EXAMPLE)
SAX.endDocument()</pre>

<p>Most of the other interfaces of libxml2 are based on the DOM tree-building
facility, so nearly everything up to the end of this document presupposes the
use of the standard DOM tree build. Note that the DOM tree itself is built by
a set of registered default callbacks, without internal specific
interface.</p>

<h2><a name="Validation">Validation &amp; DTDs</a></h2>

<p>Table of Content:</p>
<ol>
  <li><a href="#General5">General overview</a></li>
  <li><a href="#definition">The definition</a></li>
  <li><a href="#Simple">Simple rules</a>
    <ol>
      <li><a href="#reference">How to reference a DTD from a document</a></li>
      <li><a href="#Declaring">Declaring elements</a></li>
      <li><a href="#Declaring1">Declaring attributes</a></li>
    </ol>
  </li>
  <li><a href="#Some">Some examples</a></li>
  <li><a href="#validate">How to validate</a></li>
  <li><a href="#Other">Other resources</a></li>
</ol>

<h3><a name="General5">General overview</a></h3>

<p>Well what is validation and what is a DTD ?</p>

<p>DTD is the acronym for Document Type Definition. This is a description of
the content for a family of XML files. This is part of the XML 1.0
specification, and allows one to describe and verify that a given document
instance conforms to the set of rules detailing its structure and content.</p>

<p>Validation is the process of checking a document against a DTD (more
generally against a set of construction rules).</p>

<p>The validation process and building DTDs are the two most difficult parts
of the XML life cycle. Briefly a DTD defines all the possible elements to be
found within your document, what is the formal shape of your document tree
(by defining the allowed content of an element; either text, a regular
expression for the allowed list of children, or mixed content i.e. both text
and children). The DTD also defines the valid attributes for all elements and
the types of those attributes.</p>

<h3><a name="definition1">The definition</a></h3>

<p>The <a href="http://www.w3.org/TR/REC-xml">W3C XML Recommendation</a> (<a
href="http://www.xml.com/axml/axml.html">Tim Bray's annotated version of
Rev1</a>):</p>
<ul>
  <li><a href="http://www.w3.org/TR/REC-xml#elemdecls">Declaring
  elements</a></li>
  <li><a href="http://www.w3.org/TR/REC-xml#attdecls">Declaring
  attributes</a></li>
</ul>

<p>(unfortunately) all this is inherited from the SGML world, the syntax is
ancient...</p>

<h3><a name="Simple1">Simple rules</a></h3>

<p>Writing DTDs can be done in many ways. The rules to build them if you need
something permanent or something which can evolve over time can be radically
different. Really complex DTDs like DocBook ones are flexible but quite
harder to design. I will just focus on DTDs for a formats with a fixed simple
structure. It is just a set of basic rules, and definitely not exhaustive nor
usable for complex DTD design.</p>

<h4><a name="reference1">How to reference a DTD from a document</a>:</h4>

<p>Assuming the top element of the document is <code>spec</code> and the dtd
is placed in the file <code>mydtd</code> in the subdirectory
<code>dtds</code> of the directory from where the document were loaded:</p>

<p><code>&lt;!DOCTYPE spec SYSTEM "dtds/mydtd"&gt;</code></p>

<p>Notes:</p>
<ul>
  <li>The system string is actually an URI-Reference (as defined in <a
    href="http://www.ietf.org/rfc/rfc2396.txt">RFC 2396</a>) so you can use a
    full URL string indicating the location of your DTD on the Web. This is a
    really good thing to do if you want others to validate your document.</li>
  <li>It is also possible to associate a <code>PUBLIC</code> identifier (a
    magic string) so that the DTD is looked up in catalogs on the client side
    without having to locate it on the web.</li>
  <li>A DTD contains a set of element and attribute declarations, but they
    don't define what the root of the document should be. This is explicitly
    told to the parser/validator as the first element of the
    <code>DOCTYPE</code> declaration.</li>
</ul>

<h4><a name="Declaring2">Declaring elements</a>:</h4>

<p>The following declares an element <code>spec</code>:</p>

<p><code>&lt;!ELEMENT spec (front, body, back?)&gt;</code></p>

<p>It also expresses that the spec element contains one <code>front</code>,
one <code>body</code> and one optional <code>back</code> children elements in
this order. The declaration of one element of the structure and its content
are done in a single declaration. Similarly the following declares
<code>div1</code> elements:</p>

<p><code>&lt;!ELEMENT div1 (head, (p | list | note)*, div2?)&gt;</code></p>

<p>which means div1 contains one <code>head</code> then a series of optional
<code>p</code>, <code>list</code>s and <code>note</code>s and then an
optional <code>div2</code>. And last but not least an element can contain
text:</p>

<p><code>&lt;!ELEMENT b (#PCDATA)&gt;</code></p>

<p><code>b</code> contains text or being of mixed content (text and elements
in no particular order):</p>

<p><code>&lt;!ELEMENT p (#PCDATA|a|ul|b|i|em)*&gt;</code></p>

<p><code>p </code>can contain text or <code>a</code>, <code>ul</code>,
<code>b</code>, <code>i </code>or <code>em</code> elements in no particular
order.</p>

<h4><a name="Declaring1">Declaring attributes</a>:</h4>

<p>Again the attributes declaration includes their content definition:</p>

<p><code>&lt;!ATTLIST termdef name CDATA #IMPLIED&gt;</code></p>

<p>means that the element <code>termdef</code> can have a <code>name</code>
attribute containing text (<code>CDATA</code>) and which is optional
(<code>#IMPLIED</code>). The attribute value can also be defined within a
set:</p>

<p><code>&lt;!ATTLIST list type (bullets|ordered|glossary)
"ordered"&gt;</code></p>

<p>means <code>list</code> element have a <code>type</code> attribute with 3
allowed values "bullets", "ordered" or "glossary" and which default to
"ordered" if the attribute is not explicitly specified.</p>

<p>The content type of an attribute can be text (<code>CDATA</code>),
anchor/reference/references
(<code>ID</code>/<code>IDREF</code>/<code>IDREFS</code>), entity(ies)
(<code>ENTITY</code>/<code>ENTITIES</code>) or name(s)
(<code>NMTOKEN</code>/<code>NMTOKENS</code>). The following defines that a
<code>chapter</code> element can have an optional <code>id</code> attribute
of type <code>ID</code>, usable for reference from attribute of type
IDREF:</p>

<p><code>&lt;!ATTLIST chapter id ID #IMPLIED&gt;</code></p>

<p>The last value of an attribute definition can be <code>#REQUIRED
</code>meaning that the attribute has to be given, <code>#IMPLIED</code>
meaning that it is optional, or the default value (possibly prefixed by
<code>#FIXED</code> if it is the only allowed).</p>

<p>Notes:</p>
<ul>
  <li>Usually the attributes pertaining to a given element are declared in a
    single expression, but it is just a convention adopted by a lot of DTD
    writers:
    <pre>&lt;!ATTLIST termdef
          id      ID      #REQUIRED
          name    CDATA   #IMPLIED&gt;</pre>
    <p>The previous construct defines both <code>id</code> and
    <code>name</code> attributes for the element <code>termdef</code>.</p>
  </li>
</ul>

<h3><a name="Some1">Some examples</a></h3>

<p>The directory <code>test/valid/dtds/</code> in the libxml2 distribution
contains some complex DTD examples. The example in the file
<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
directly included within the document.</p>

<h3><a name="validate1">How to validate</a></h3>

<p>The simplest way is to use the xmllint program included with libxml. The
<code>--valid</code> option turns-on validation of the files given as input.
For example the following validates a copy of the first revision of the XML
1.0 specification:</p>

<p><code>xmllint --valid --noout test/valid/REC-xml-19980210.xml</code></p>

<p>the -- noout is used to disable output of the resulting tree.</p>

<p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
against a given DTD.</p>

<p>Libxml2 exports an API to handle DTDs and validation, check the <a
href="http://xmlsoft.org/html/libxml-valid.html">associated
description</a>.</p>

<h3><a name="Other1">Other resources</a></h3>

<p>DTDs are as old as SGML. So there may be a number of examples on-line, I
will just list one for now, others pointers welcome:</p>
<ul>
  <li><a href="http://www.xml101.com:8081/dtd/">XML-101 DTD</a></li>
</ul>

<p>I suggest looking at the examples found under test/valid/dtd and any of
the large number of books available on XML. The dia example in test/valid
should be both simple and complete enough to allow you to build your own.</p>

<p></p>

<h2><a name="Memory">Memory Management</a></h2>

<p>Table of Content:</p>
<ol>
  <li><a href="#General3">General overview</a></li>
  <li><a href="#setting">Setting libxml2 set of memory routines</a></li>
  <li><a href="#cleanup">Cleaning up after using the library</a></li>
  <li><a href="#Debugging">Debugging routines</a></li>
  <li><a href="#General4">General memory requirements</a></li>
  <li><a href="#Compacting">Returning memory to the kernel</a></li>
</ol>

<h3><a name="General3">General overview</a></h3>

<p>The module <code><a
href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlmemory.h</a></code>
provides the interfaces to the libxml2 memory system:</p>
<ul>
  <li>libxml2 does not use the libc memory allocator directly but xmlFree(),
    xmlMalloc() and xmlRealloc()</li>
  <li>those routines can be reallocated to a specific set of routine, by
    default the libc ones i.e. free(), malloc() and realloc()</li>
  <li>the xmlmemory.c module includes a set of debugging routine</li>
</ul>

<h3><a name="setting">Setting libxml2 set of memory routines</a></h3>

<p>It is sometimes useful to not use the default memory allocator, either for
debugging, analysis or to implement a specific behaviour on memory management
(like on embedded systems). Two function calls are available to do so:</p>
<ul>
  <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemGet
    ()</a> which return the current set of functions in use by the parser</li>
  <li><a
    href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemSetup()</a>
    which allow to set up a new set of memory allocation functions</li>
</ul>

<p>Of course a call to xmlMemSetup() should probably be done before calling
any other libxml2 routines (unless you are sure your allocations routines are
compatibles).</p>

<h3><a name="cleanup">Cleaning up after using the library</a></h3>

<p>Libxml2 is not stateless, there is a few set of memory structures needing
allocation before the parser is fully functional (some encoding structures
for example). This also mean that once parsing is finished there is a tiny
amount of memory (a few hundred bytes) which can be recollected if you don't
reuse the library or any document built with it:</p>
<ul>
  <li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlCleanupParser
    ()</a> is a centralized routine to free the library state and data. Note
    that it won't deallocate any produced tree if any (use the xmlFreeDoc()
    and related routines for this). This should be called only when the library
    is not used anymore.</li>
  <li><a href="http://xmlsoft.org/html/libxml-parser.html">xmlInitParser
    ()</a> is the dual routine allowing to preallocate the parsing state
    which can be useful for example to avoid initialization reentrancy
    problems when using libxml2 in multithreaded applications</li>
</ul>

<p>Generally xmlCleanupParser() is safe assuming no parsing is ongoing and
no document is still being used, if needed the state will be rebuild at the
next invocation of parser routines (or by xmlInitParser()), but be careful
of the consequences in multithreaded applications.</p>

<h3><a name="Debugging">Debugging routines</a></h3>

<p>When configured using --with-mem-debug flag (off by default), libxml2 uses
a set of memory allocation debugging routines keeping track of all allocated
blocks and the location in the code where the routine was called. A couple of
other debugging routines allow to dump the memory allocated infos to a file
or call a specific routine when a given block number is allocated:</p>
<ul>
  <li><a
    href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMallocLoc()</a>
    <a
    href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlReallocLoc()</a>
    and <a
    href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemStrdupLoc()</a>
    are the memory debugging replacement allocation routines</li>
  <li><a href="http://xmlsoft.org/html/libxml-xmlmemory.html">xmlMemoryDump
    ()</a> dumps all the information about the allocated memory block lefts
    in the <code>.memdump</code> file</li>
</ul>

<p>When developing libxml2 memory debug is enabled, the tests programs call
xmlMemoryDump () and the "make test" regression tests will check for any
memory leak during the full regression test sequence, this helps a lot
ensuring that libxml2  does not leak memory and bullet proof memory
allocations use (some libc implementations are known to be far too permissive
resulting in major portability problems!).</p>

<p>If the .memdump reports a leak, it displays the allocation function and
also tries to give some information about the content and structure of the
allocated blocks left. This is sufficient in most cases to find the culprit,
but not always. Assuming the allocation problem is reproducible, it is
possible to find more easily:</p>
<ol>
  <li>write down the block number xxxx not allocated</li>
  <li>export the environment variable XML_MEM_BREAKPOINT=xxxx , the easiest
    when using GDB is to simply give the command
    <p><code>set environment XML_MEM_BREAKPOINT xxxx</code></p>
    <p>before running the program.</p>
  </li>
  <li>run the program under a debugger and set a breakpoint on
    xmlMallocBreakpoint() a specific function called when this precise block
    is allocated</li>
  <li>when the breakpoint is reached you can then do a fine analysis of the
    allocation an step  to see the condition resulting in the missing
    deallocation.</li>
</ol>

<p>I used to use a commercial tool to debug libxml2 memory problems but after
noticing that it was not detecting memory leaks that simple mechanism was
used and proved extremely efficient until now. Lately I have also used <a
href="http://developer.kde.org/~sewardj/">valgrind</a> with quite some
success, it is tied to the i386 architecture since it works by emulating the
processor and instruction set, it is slow but  extremely efficient, i.e. it
spot memory usage errors in a very precise way.</p>

<h3><a name="General4">General memory requirements</a></h3>

<p>How much libxml2 memory require ? It's hard to tell in average it depends
of a number of things:</p>
<ul>
  <li>the parser itself should work  in a fixed amount of memory, except for
    information maintained about the stacks of names and  entities locations.
    The I/O and encoding handlers will probably account for a few KBytes.
    This is true for both the XML and HTML parser (though the HTML parser
    need more state).</li>
  <li>If you are generating the DOM tree then memory requirements will grow
    nearly linear with the size of the data. In general for a balanced
    textual document the internal memory requirement is about 4 times the
    size of the UTF8 serialization of this document (example the XML-1.0
    recommendation is a bit more of 150KBytes and takes 650KBytes of main
    memory when parsed). Validation will add a amount of memory required for
    maintaining the external Dtd state which should be linear with the
    complexity of the content model defined by the Dtd</li>
  <li>If you need to work with fixed memory requirements or don't need the
    full DOM tree then using the <a href="xmlreader.html">xmlReader
    interface</a> is probably the best way to proceed, it still allows to
    validate or operate on subset of the tree if needed.</li>
  <li>If you don't care about the advanced features of libxml2 like
    validation, DOM, XPath or XPointer, don't use entities, need to work with
    fixed memory requirements, and try to get the fastest parsing possible
    then the SAX interface should be used, but it has known restrictions.</li>
</ul>

<p></p>
<h3><a name="Compacting">Returning memory to the kernel</a></h3>

<p>You may encounter that your process using libxml2 does not have a
reduced memory usage although you freed the trees. This is because
libxml2 allocates memory in a number of small chunks. When freeing one
of those chunks, the OS may decide that giving this little memory back
to the kernel will cause too much overhead and delay the operation. As
all chunks are this small, they get actually freed but not returned to
the kernel. On systems using glibc, there is a function call
"malloc_trim" from malloc.h which does this missing operation (note that
it is allowed to fail). Thus, after freeing your tree you may simply try
"malloc_trim(0);" to really get the memory back. If your OS does not
provide malloc_trim, try searching for a similar function.</p>
<p></p>

<h2><a name="Encodings">Encodings support</a></h2>

<p>If you are not really familiar with Internationalization (usual shortcut
is I18N) , Unicode, characters and glyphs, I suggest you read a <a
href="http://www.tbray.org/ongoing/When/200x/2003/04/06/Unicode">presentation</a>
by Tim Bray on Unicode and why you should care about it.</p>

<p>If you don't understand why <b>it does not make sense to have a string
without knowing what encoding it uses</b>, then as Joel Spolsky said <a
href="http://www.joelonsoftware.com/articles/Unicode.html">please do not
write another line of code until you finish reading that article.</a>. It is
a prerequisite to understand this page, and avoid a lot of problems with
libxml2, XML or text processing in general.</p>

<p>Table of Content:</p>
<ol>
  <li><a href="encoding.html#What">What does internationalization support
    mean ?</a></li>
  <li><a href="encoding.html#internal">The internal encoding, how and
  why</a></li>
  <li><a href="encoding.html#implemente">How is it implemented ?</a></li>
  <li><a href="encoding.html#Default">Default supported encodings</a></li>
  <li><a href="encoding.html#extend">How to extend the existing
  support</a></li>
</ol>

<h3><a name="What">What does internationalization support mean ?</a></h3>

<p>XML was designed from the start to allow the support of any character set
by using Unicode. Any conformant XML parser has to support the UTF-8 and
UTF-16 default encodings which can both express the full unicode ranges. UTF8
is a variable length encoding whose greatest points are to reuse the same
encoding for ASCII and to save space for Western encodings, but it is a bit
more complex to handle in practice. UTF-16 use 2 bytes per character (and
sometimes combines two pairs), it makes implementation easier, but looks a
bit overkill for Western languages encoding. Moreover the XML specification
allows the document to be encoded in other encodings at the condition that
they are clearly labeled as such. For example the following is a wellformed
XML document encoded in ISO-8859-1 and using accentuated letters that we
French like for both markup and content:</p>
<pre>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;tr&egrave;s&gt;l&agrave; &lt;/tr&egrave;s&gt;</pre>

<p>Having internationalization support in libxml2 means the following:</p>
<ul>
  <li>the document is properly parsed</li>
  <li>information about it's encoding is saved</li>
  <li>it can be modified</li>
  <li>it can be saved in its original encoding</li>
  <li>it can also be saved in another encoding supported by libxml2 (for
    example straight UTF8 or even an ASCII form)</li>
</ul>

<p>Another very important point is that the whole libxml2 API, with the
exception of a few routines to read with a specific encoding or save to a
specific encoding, is completely agnostic about the original encoding of the
document.</p>

<p>It should be noted too that the HTML parser embedded in libxml2 now obey
the same rules too, the following document will be (as of 2.2.2) handled  in
an internationalized fashion by libxml2 too:</p>
<pre>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
                      "http://www.w3.org/TR/REC-html40/loose.dtd"&gt;
&lt;html lang="fr"&gt;
&lt;head&gt;
  &lt;META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p&gt;W3C cr&eacute;e des standards pour le Web.&lt;/body&gt;
&lt;/html&gt;</pre>

<h3><a name="internal">The internal encoding, how and why</a></h3>

<p>One of the core decisions was to force all documents to be converted to a
default internal encoding, and that encoding to be UTF-8, here are the
rationales for those choices:</p>
<ul>
  <li>keeping the native encoding in the internal form would force the libxml
    users (or the code associated) to be fully aware of the encoding of the
    original document, for examples when adding a text node to a document,
    the content would have to be provided in the document encoding, i.e. the
    client code would have to check it before hand, make sure it's conformant
    to the encoding, etc ... Very hard in practice, though in some specific
    cases this may make sense.</li>
  <li>the second decision was which encoding. From the XML spec only UTF8 and
    UTF16 really makes sense as being the two only encodings for which there
    is mandatory support. UCS-4 (32 bits fixed size encoding) could be
    considered an intelligent choice too since it's a direct Unicode mapping
    support. I selected UTF-8 on the basis of efficiency and compatibility
    with surrounding software:
    <ul>
      <li>UTF-8 while a bit more complex to convert from/to (i.e. slightly
        more costly to import and export CPU wise) is also far more compact
        than UTF-16 (and UCS-4) for a majority of the documents I see it used
        for right now (RPM RDF catalogs, advogato data, various configuration
        file formats, etc.) and the key point for today's computer
        architecture is efficient uses of caches. If one nearly double the
        memory requirement to store the same amount of data, this will trash
        caches (main memory/external caches/internal caches) and my take is
        that this harms the system far more than the CPU requirements needed
        for the conversion to UTF-8</li>
      <li>Most of libxml2 version 1 users were using it with straight ASCII
        most of the time, doing the conversion with an internal encoding
        requiring all their code to be rewritten was a serious show-stopper
        for using UTF-16 or UCS-4.</li>
      <li>UTF-8 is being used as the de-facto internal encoding standard for
        related code like the <a href="http://www.pango.org/">pango</a>
        upcoming Gnome text widget, and a lot of Unix code (yet another place
        where Unix programmer base takes a different approach from Microsoft
        - they are using UTF-16)</li>
    </ul>
  </li>
</ul>

<p>What does this mean in practice for the libxml2 user:</p>
<ul>
  <li>xmlChar, the libxml2 data type is a byte, those bytes must be assembled
    as UTF-8 valid strings. The proper way to terminate an xmlChar * string
    is simply to append 0 byte, as usual.</li>
  <li>One just need to make sure that when using chars outside the ASCII set,
    the values has been properly converted to UTF-8</li>
</ul>

<h3><a name="implemente">How is it implemented ?</a></h3>

<p>Let's describe how all this works within libxml, basically the I18N
(internationalization) support get triggered only during I/O operation, i.e.
when reading a document or saving one. Let's look first at the reading
sequence:</p>
<ol>
  <li>when a document is processed, we usually don't know the encoding, a
    simple heuristic allows to detect UTF-16 and UCS-4 from encodings where
    the ASCII range (0-0x7F) maps with ASCII</li>
  <li>the xml declaration if available is parsed, including the encoding
    declaration. At that point, if the autodetected encoding is different
    from the one declared a call to xmlSwitchEncoding() is issued.</li>
  <li>If there is no encoding declaration, then the input has to be in either
    UTF-8 or UTF-16, if it is not then at some point when processing the
    input, the converter/checker of UTF-8 form will raise an encoding error.
    You may end-up with a garbled document, or no document at all ! Example:
    <pre>~/XML -&gt; ./xmllint err.xml 
err.xml:1: error: Input is not proper UTF-8, indicate encoding !
&lt;tr&egrave;s&gt;l&agrave; &lt;/tr&egrave;s&gt;
   ^
err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
&lt;tr&egrave;s&gt;l&agrave; &lt;/tr&egrave;s&gt;
   ^</pre>
  </li>
  <li>xmlSwitchEncoding() does an encoding name lookup, canonicalize it, and
    then search the default registered encoding converters for that encoding.
    If it's not within the default set and iconv() support has been compiled
    it, it will ask iconv for such an encoder. If this fails then the parser
    will report an error and stops processing:
    <pre>~/XML -&gt; ./xmllint err2.xml 
err2.xml:1: error: Unsupported encoding UnsupportedEnc
&lt;?xml version="1.0" encoding="UnsupportedEnc"?&gt;
                                             ^</pre>
  </li>
  <li>From that point the encoder processes progressively the input (it is
    plugged as a front-end to the I/O module) for that entity. It captures
    and converts on-the-fly the document to be parsed to UTF-8. The parser
    itself just does UTF-8 checking of this input and process it
    transparently. The only difference is that the encoding information has
    been added to the parsing context (more precisely to the input
    corresponding to this entity).</li>
  <li>The result (when using DOM) is an internal form completely in UTF-8
    with just an encoding information on the document node.</li>
</ol>

<p>Ok then what happens when saving the document (assuming you
collected/built an xmlDoc DOM like structure) ? It depends on the function
called, xmlSaveFile() will just try to save in the original encoding, while
xmlSaveFileTo() and xmlSaveFileEnc() can optionally save to a given
encoding:</p>
<ol>
  <li>if no encoding is given, libxml2 will look for an encoding value
    associated to the document and if it exists will try to save to that
    encoding,
    <p>otherwise everything is written in the internal form, i.e. UTF-8</p>
  </li>
  <li>so if an encoding was specified, either at the API level or on the
    document, libxml2 will again canonicalize the encoding name, lookup for a
    converter in the registered set or through iconv. If not found the
    function will return an error code</li>
  <li>the converter is placed before the I/O buffer layer, as another kind of
    buffer, then libxml2 will simply push the UTF-8 serialization to through
    that buffer, which will then progressively be converted and pushed onto
    the I/O layer.</li>
  <li>It is possible that the converter code fails on some input, for example
    trying to push an UTF-8 encoded Chinese character through the UTF-8 to
    ISO-8859-1 converter won't work. Since the encoders are progressive they
    will just report the error and the number of bytes converted, at that
    point libxml2 will decode the offending character, remove it from the
    buffer and replace it with the associated charRef encoding &amp;#123; and
    resume the conversion. This guarantees that any document will be saved
    without losses (except for markup names where this is not legal, this is
    a problem in the current version, in practice avoid using non-ascii
    characters for tag or attribute names). A special "ascii" encoding name
    is used to save documents to a pure ascii form can be used when
    portability is really crucial</li>
</ol>

<p>Here are a few examples based on the same test document and assumin a
terminal using ISO-8859-1 as the text encoding:</p>
<pre>~/XML -&gt; ./xmllint isolat1 
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;tr&egrave;s&gt;lÃ &lt;/tr&egrave;s&gt;
~/XML -&gt; ./xmllint --encode UTF-8 isolat1 
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;trÃ¨s&gt;lÃ &nbsp;&lt;/trÃ¨s&gt;
~/XML -&gt; </pre>

<p>The same processing is applied (and reuse most of the code) for HTML I18N
processing. Looking up and modifying the content encoding is a bit more
difficult since it is located in a &lt;meta&gt; tag under the &lt;head&gt;,
so a couple of functions htmlGetMetaEncoding() and htmlSetMetaEncoding() have
been provided. The parser also attempts to switch encoding on the fly when
detecting such a tag on input. Except for that the processing is the same
(and again reuses the same code).</p>

<h3><a name="Default">Default supported encodings</a></h3>

<p>libxml2 has a set of default converters for the following encodings
(located in encoding.c):</p>
<ol>
  <li>UTF-8 is supported by default (null handlers)</li>
  <li>UTF-16, both little and big endian</li>
  <li>ISO-Latin-1 (ISO-8859-1) covering most western languages</li>
  <li>ASCII, useful mostly for saving</li>
  <li>HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML
    predefined entities like &amp;copy; for the Copyright sign.</li>
</ol>

<p>More over when compiled on an Unix platform with iconv support the full
set of encodings supported by iconv can be instantly be used by libxml. On a
linux machine with glibc-2.1 the list of supported encodings and aliases fill
3 full pages, and include UCS-4, the full set of ISO-Latin encodings, and the
various Japanese ones.</p>

<p>To convert from the UTF-8 values returned from the API to another encoding
then it is possible to use the function provided from <a
href="html/libxml-encoding.html">the encoding module</a> like <a
href="html/libxml-encoding.html#UTF8Toisolat1">UTF8Toisolat1</a>, or use the
POSIX <a
href="http://www.opengroup.org/onlinepubs/009695399/functions/iconv.html">iconv()</a>
API directly.</p>

<h4>Encoding aliases</h4>

<p>From 2.2.3, libxml2 has support to register encoding names aliases. The
goal is to be able to parse document whose encoding is supported but where
the name differs (for example from the default set of names accepted by
iconv). The following functions allow to register and handle new aliases for
existing encodings. Once registered libxml2 will automatically lookup the
aliases when handling a document:</p>
<ul>
  <li>int xmlAddEncodingAlias(const char *name, const char *alias);</li>
  <li>int xmlDelEncodingAlias(const char *alias);</li>
  <li>const char * xmlGetEncodingAlias(const char *alias);</li>
  <li>void xmlCleanupEncodingAliases(void);</li>
</ul>

<h3><a name="extend">How to extend the existing support</a></h3>

<p>Well adding support for new encoding, or overriding one of the encoders
(assuming it is buggy) should not be hard, just write input and output
conversion routines to/from UTF-8, and register them using
xmlNewCharEncodingHandler(name, xxxToUTF8, UTF8Toxxx),  and they will be
called automatically if the parser(s) encounter such an encoding name
(register it uppercase, this will help). The description of the encoders,
their arguments and expected return values are described in the encoding.h
header.</p>

<h2><a name="IO">I/O Interfaces</a></h2>

<p>Table of Content:</p>
<ol>
  <li><a href="#General1">General overview</a></li>
  <li><a href="#basic">The basic buffer type</a></li>
  <li><a href="#Input">Input I/O handlers</a></li>
  <li><a href="#Output">Output I/O handlers</a></li>
  <li><a href="#entities">The entities loader</a></li>
  <li><a href="#Example2">Example of customized I/O</a></li>
</ol>

<h3><a name="General1">General overview</a></h3>

<p>The module <code><a
href="http://xmlsoft.org/html/libxml-xmlio.html">xmlIO.h</a></code> provides
the interfaces to the libxml2 I/O system. This consists of 4 main parts:</p>
<ul>
  <li>Entities loader, this is a routine which tries to fetch the entities
    (files) based on their PUBLIC and SYSTEM identifiers. The default loader
    don't look at the public identifier since libxml2 do not maintain a
    catalog. You can redefine you own entity loader by using
    <code>xmlGetExternalEntityLoader()</code> and
    <code>xmlSetExternalEntityLoader()</code>. <a href="#entities">Check the
    example</a>.</li>
  <li>Input I/O buffers which are a commodity structure used by the parser(s)
    input layer to handle fetching the information to feed the parser. This
    provides buffering and is also a placeholder where the encoding
    converters to UTF8 are piggy-backed.</li>
  <li>Output I/O buffers are similar to the Input ones and fulfill similar
    task but when generating a serialization from a tree.</li>
  <li>A mechanism to register sets of I/O callbacks and associate them with
    specific naming schemes like the protocol part of the URIs.
    <p>This affect the default I/O operations and allows to use specific I/O
    handlers for certain names.</p>
  </li>
</ul>

<p>The general mechanism used when loading http://rpmfind.net/xml.html for
example in the HTML parser is the following:</p>
<ol>
  <li>The default entity loader calls <code>xmlNewInputFromFile()</code> with
    the parsing context and the URI string.</li>
  <li>the URI string is checked against the existing registered handlers
    using their match() callback function, if the HTTP module was compiled
    in, it is registered and its match() function will succeeds</li>
  <li>the open() function of the handler is called and if successful will
    return an I/O Input buffer</li>
  <li>the parser will the start reading from this buffer and progressively
    fetch information from the resource, calling the read() function of the
    handler until the resource is exhausted</li>
  <li>if an encoding change is detected it will be installed on the input
    buffer, providing buffering and efficient use of the conversion
  routines</li>
  <li>once the parser has finished, the close() function of the handler is
    called once and the Input buffer and associated resources are
  deallocated.</li>
</ol>

<p>The user defined callbacks are checked first to allow overriding of the
default libxml2 I/O routines.</p>

<h3><a name="basic">The basic buffer type</a></h3>

<p>All the buffer manipulation handling is done using the
<code>xmlBuffer</code> type define in <code><a
href="http://xmlsoft.org/html/libxml-tree.html">tree.h</a> </code>which is a
resizable memory buffer. The buffer allocation strategy can be selected to be
either best-fit or use an exponential doubling one (CPU vs. memory use
trade-off). The values are <code>XML_BUFFER_ALLOC_EXACT</code> and
<code>XML_BUFFER_ALLOC_DOUBLEIT</code>, and can be set individually or on a
system wide basis using <code>xmlBufferSetAllocationScheme()</code>. A number
of functions allows to manipulate buffers with names starting with the
<code>xmlBuffer...</code> prefix.</p>

<h3><a name="Input">Input I/O handlers</a></h3>

<p>An Input I/O handler is a simple structure
<code>xmlParserInputBuffer</code> containing a context associated to the
resource (file descriptor, or pointer to a protocol handler), the read() and
close() callbacks to use and an xmlBuffer. And extra xmlBuffer and a charset
encoding handler are also present to support charset conversion when
needed.</p>

<h3><a name="Output">Output I/O handlers</a></h3>

<p>An Output handler <code>xmlOutputBuffer</code> is completely similar to an
Input one except the callbacks are write() and close().</p>

<h3><a name="entities">The entities loader</a></h3>

<p>The entity loader resolves requests for new entities and create inputs for
the parser. Creating an input from a filename or an URI string is done
through the xmlNewInputFromFile() routine.  The default entity loader do not
handle the PUBLIC identifier associated with an entity (if any). So it just
calls xmlNewInputFromFile() with the SYSTEM identifier (which is mandatory in
XML).</p>

<p>If you want to hook up a catalog mechanism then you simply need to
override the default entity loader, here is an example:</p>
<pre>#include &lt;libxml/xmlIO.h&gt;

xmlExternalEntityLoader defaultLoader = NULL;

xmlParserInputPtr
xmlMyExternalEntityLoader(const char *URL, const char *ID,
                               xmlParserCtxtPtr ctxt) {
    xmlParserInputPtr ret;
    const char *fileID = NULL;
    /* lookup for the fileID depending on ID */

    ret = xmlNewInputFromFile(ctxt, fileID);
    if (ret != NULL)
        return(ret);
    if (defaultLoader != NULL)
        ret = defaultLoader(URL, ID, ctxt);
    return(ret);
}

int main(..) {
    ...

    /*
     * Install our own entity loader
     */
    defaultLoader = xmlGetExternalEntityLoader();
    xmlSetExternalEntityLoader(xmlMyExternalEntityLoader);

    ...
}</pre>

<h3><a name="Example2">Example of customized I/O</a></h3>

<p>This example come from <a href="http://xmlsoft.org/messages/0708.html">a
real use case</a>,  xmlDocDump() closes the FILE * passed by the application
and this was a problem. The <a
href="http://xmlsoft.org/messages/0711.html">solution</a> was to redefine a
new output handler with the closing call deactivated:</p>
<ol>
  <li>First define a new I/O output allocator where the output don't close
    the file:
    <pre>xmlOutputBufferPtr
xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) {
&nbsp;&nbsp;&nbsp;&nbsp;xmlOutputBufferPtr ret;
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;if (xmlOutputCallbackInitialized == 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xmlRegisterDefaultOutputCallbacks();

&nbsp;&nbsp;&nbsp;&nbsp;if (file == NULL) return(NULL);
&nbsp;&nbsp;&nbsp;&nbsp;ret = xmlAllocOutputBuffer(encoder);
&nbsp;&nbsp;&nbsp;&nbsp;if (ret != NULL) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret-&gt;context = file;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret-&gt;writecallback = xmlFileWrite;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret-&gt;closecallback = NULL;  /* No close callback */
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;return(ret);
} </pre>
  </li>
  <li>And then use it to save the document:
    <pre>FILE *f;
xmlOutputBufferPtr output;
xmlDocPtr doc;
int res;

f = ...
doc = ....

output = xmlOutputBufferCreateOwn(f, NULL);
res = xmlSaveFileTo(output, doc, NULL);
    </pre>
  </li>
</ol>

<h2><a name="Catalog">Catalog support</a></h2>

<p>Table of Content:</p>
<ol>
  <li><a href="General2">General overview</a></li>
  <li><a href="#definition">The definition</a></li>
  <li><a href="#Simple">Using catalogs</a></li>
  <li><a href="#Some">Some examples</a></li>
  <li><a href="#reference">How to tune  catalog usage</a></li>
  <li><a href="#validate">How to debug catalog processing</a></li>
  <li><a href="#Declaring">How to create and maintain catalogs</a></li>
  <li><a href="#implemento">The implementor corner quick review of the
  API</a></li>
  <li><a href="#Other">Other resources</a></li>
</ol>

<h3><a name="General2">General overview</a></h3>

<p>What is a catalog? Basically it's a lookup mechanism used when an entity
(a file or a remote resource) references another entity. The catalog lookup
is inserted between the moment the reference is recognized by the software
(XML parser, stylesheet processing, or even images referenced for inclusion
in a rendering) and the time where loading that resource is actually
started.</p>

<p>It is basically used for 3 things:</p>
<ul>
  <li>mapping from "logical" names, the public identifiers and a more
    concrete name usable for download (and URI). For example it can associate
    the logical name
    <p>"-//OASIS//DTD DocBook XML V4.1.2//EN"</p>
    <p>of the DocBook 4.1.2 XML DTD with the actual URL where it can be
    downloaded</p>
    <p>http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd</p>
  </li>
  <li>remapping from a given URL to another one, like an HTTP indirection
    saying that
    <p>"http://www.oasis-open.org/committes/tr.xsl"</p>
    <p>should really be looked at</p>
    <p>"http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"</p>
  </li>
  <li>providing a local cache mechanism allowing to load the entities
    associated to public identifiers or remote resources, this is a really
    important feature for any significant deployment of XML or SGML since it
    allows to avoid the aleas and delays associated to fetching remote
    resources.</li>
</ul>

<h3><a name="definition">The definitions</a></h3>

<p>Libxml, as of 2.4.3 implements 2 kind of catalogs:</p>
<ul>
  <li>the older SGML catalogs, the official spec is  SGML Open Technical
    Resolution TR9401:1997, but is better understood by reading <a
    href="http://www.jclark.com/sp/catalog.htm">the SP Catalog page</a> from
    James Clark. This is relatively old and not the preferred mode of
    operation of libxml.</li>
  <li><a href="http://www.oasis-open.org/committees/entity/spec.html">XML
    Catalogs</a> is far more flexible, more recent, uses an XML syntax and
    should scale quite better. This is the default option of libxml.</li>
</ul>

<p></p>

<h3><a name="Simple">Using catalog</a></h3>

<p>In a normal environment libxml2 will by default check the presence of a
catalog in /etc/xml/catalog, and assuming it has been correctly populated,
the processing is completely transparent to the document user. To take a
concrete example, suppose you are authoring a DocBook document, this one
starts with the following DOCTYPE definition:</p>
<pre>&lt;?xml version='1.0'?&gt;
&lt;!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"
          "http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd"&gt;</pre>

<p>When validating the document with libxml, the catalog will be
automatically consulted to lookup the public identifier "-//Norman Walsh//DTD
DocBk XML V3.1.4//EN" and the system identifier
"http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd", and if these entities have
been installed on your system and the catalogs actually point to them, libxml
will fetch them from the local disk.</p>

<p style="font-size: 10pt"><strong>Note</strong>: Really don't use this
DOCTYPE example it's a really old version, but is fine as an example.</p>

<p>Libxml2 will check the catalog each time that it is requested to load an
entity, this includes DTD, external parsed entities, stylesheets, etc ... If
your system is correctly configured all the authoring phase and processing
should use only local files, even if your document stays portable because it
uses the canonical public and system ID, referencing the remote document.</p>

<h3><a name="Some">Some examples:</a></h3>

<p>Here is a couple of fragments from XML Catalogs used in libxml2 early
regression tests in <code>test/catalogs</code> :</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE catalog PUBLIC 
   "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
   "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
  &lt;public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
   uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/&gt;
...</pre>

<p>This is the beginning of a catalog for DocBook 4.1.2, XML Catalogs are
written in XML,  there is a specific namespace for catalog elements
"urn:oasis:names:tc:entity:xmlns:xml:catalog". The first entry in this
catalog is a <code>public</code> mapping it allows to associate a Public
Identifier with an URI.</p>
<pre>...
    &lt;rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/"
                   rewritePrefix="file:///usr/share/xml/docbook/"/&gt;
...</pre>

<p>A <code>rewriteSystem</code> is a very powerful instruction, it says that
any URI starting with a given prefix should be looked at another  URI
constructed by replacing the prefix with an new one. In effect this acts like
a cache system for a full area of the Web. In practice it is extremely useful
with a file prefix if you have installed a copy of those resources on your
local system.</p>
<pre>...
&lt;delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
                catalog="file:///usr/share/xml/docbook.xml"/&gt;
&lt;delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
                catalog="file:///usr/share/xml/docbook.xml"/&gt;
&lt;delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
                catalog="file:///usr/share/xml/docbook.xml"/&gt;
&lt;delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
                catalog="file:///usr/share/xml/docbook.xml"/&gt;
&lt;delegateURI uriStartString="http://www.oasis-open.org/docbook/"
                catalog="file:///usr/share/xml/docbook.xml"/&gt;
...</pre>

<p>Delegation is the core features which allows to build a tree of catalogs,
easier to maintain than a single catalog, based on Public Identifier, System
Identifier or URI prefixes it instructs the catalog software to look up
entries in another resource. This feature allow to build hierarchies of
catalogs, the set of entries presented should be sufficient to redirect the
resolution of all DocBook references to the specific catalog in
<code>/usr/share/xml/docbook.xml</code> this one in turn could delegate all
references for DocBook 4.2.1 to a specific catalog installed at the same time
as the DocBook resources on the local machine.</p>

<h3><a name="reference">How to tune catalog usage:</a></h3>

<p>The user can change the default catalog behaviour by redirecting queries
to its own set of catalogs, this can be done by setting the
<code>XML_CATALOG_FILES</code> environment variable to a list of catalogs, an
empty one should deactivate loading the default <code>/etc/xml/catalog</code>
default catalog</p>

<h3><a name="validate">How to debug catalog processing:</a></h3>

<p>Setting up the <code>XML_DEBUG_CATALOG</code> environment variable will
make libxml2 output debugging information for each catalog operations, for
example:</p>
<pre>orchis:~/XML -&gt; xmllint --memory --noout test/ent2
warning: failed to load external entity "title.xml"
orchis:~/XML -&gt; export XML_DEBUG_CATALOG=
orchis:~/XML -&gt; xmllint --memory --noout test/ent2
Failed to parse catalog /etc/xml/catalog
Failed to parse catalog /etc/xml/catalog
warning: failed to load external entity "title.xml"
Catalogs cleanup
orchis:~/XML -&gt; </pre>

<p>The test/ent2 references an entity, running the parser from memory makes
the base URI unavailable and the the "title.xml" entity cannot be loaded.
Setting up the debug environment variable allows to detect that an attempt is
made to load the <code>/etc/xml/catalog</code> but since it's not present the
resolution fails.</p>

<p>But the most advanced way to debug XML catalog processing is to use the
<strong>xmlcatalog</strong> command shipped with libxml2, it allows to load
catalogs and make resolution queries to see what is going on. This is also
used for the regression tests:</p>
<pre>orchis:~/XML -&gt; ./xmlcatalog test/catalogs/docbook.xml \
                   "-//OASIS//DTD DocBook XML V4.1.2//EN"
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
orchis:~/XML -&gt; </pre>

<p>For debugging what is going on, adding one -v flags increase the verbosity
level to indicate the processing done (adding a second flag also indicate
what elements are recognized at parsing):</p>
<pre>orchis:~/XML -&gt; ./xmlcatalog -v test/catalogs/docbook.xml \
                   "-//OASIS//DTD DocBook XML V4.1.2//EN"
Parsing catalog test/catalogs/docbook.xml's content
Found public match -//OASIS//DTD DocBook XML V4.1.2//EN
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
Catalogs cleanup
orchis:~/XML -&gt; </pre>

<p>A shell interface is also available to debug and process multiple queries
(and for regression tests):</p>
<pre>orchis:~/XML -&gt; ./xmlcatalog -shell test/catalogs/docbook.xml \
                   "-//OASIS//DTD DocBook XML V4.1.2//EN"
&gt; help   
Commands available:
public PublicID: make a PUBLIC identifier lookup
system SystemID: make a SYSTEM identifier lookup
resolve PublicID SystemID: do a full resolver lookup
add 'type' 'orig' 'replace' : add an entry
del 'values' : remove values
dump: print the current catalog state
debug: increase the verbosity level
quiet: decrease the verbosity level
exit:  quit the shell
&gt; public "-//OASIS//DTD DocBook XML V4.1.2//EN"
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
&gt; quit
orchis:~/XML -&gt; </pre>

<p>This should be sufficient for most debugging purpose, this was actually
used heavily to debug the XML Catalog implementation itself.</p>

<h3><a name="Declaring">How to create and maintain</a> catalogs:</h3>

<p>Basically XML Catalogs are XML files, you can either use XML tools to
manage them or use  <strong>xmlcatalog</strong> for this. The basic step is
to create a catalog the -create option provide this facility:</p>
<pre>orchis:~/XML -&gt; ./xmlcatalog --create tst.xml
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
         "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/&gt;
orchis:~/XML -&gt; </pre>

<p>By default xmlcatalog does not overwrite the original catalog and save the
result on the standard output, this can be overridden using the -noout
option. The <code>-add</code> command allows to add entries in the
catalog:</p>
<pre>orchis:~/XML -&gt; ./xmlcatalog --noout --create --add "public" \
  "-//OASIS//DTD DocBook XML V4.1.2//EN" \
  http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd tst.xml
orchis:~/XML -&gt; cat tst.xml
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" \
  "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"&gt;
&lt;public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
        uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/&gt;
&lt;/catalog&gt;
orchis:~/XML -&gt; </pre>

<p>The <code>-add</code> option will always take 3 parameters even if some of
the XML Catalog constructs (like nextCatalog) will have only a single
argument, just pass a third empty string, it will be ignored.</p>

<p>Similarly the <code>-del</code> option remove matching entries from the
catalog:</p>
<pre>orchis:~/XML -&gt; ./xmlcatalog --del \
  "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" tst.xml
&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
    "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"&gt;
&lt;catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/&gt;
orchis:~/XML -&gt; </pre>

<p>The catalog is now empty. Note that the matching of <code>-del</code> is
exact and would have worked in a similar fashion with the Public ID
string.</p>

<p>This is rudimentary but should be sufficient to manage a not too complex
catalog tree of resources.</p>

<h3><a name="implemento">The implementor corner quick review of the
API:</a></h3>

<p>First, and like for every other module of libxml, there is an
automatically generated <a href="html/libxml-catalog.html">API page for
catalog support</a>.</p>

<p>The header for the catalog interfaces should be included as:</p>
<pre>#include &lt;libxml/catalog.h&gt;</pre>

<p>The API is voluntarily kept very simple. First it is not obvious that
applications really need access to it since it is the default behaviour of
libxml2 (Note: it is possible to completely override libxml2 default catalog
by using <a href="html/libxml-parser.html">xmlSetExternalEntityLoader</a> to
plug an application specific resolver).</p>

<p>Basically libxml2 support 2 catalog lists:</p>
<ul>
  <li>the default one, global shared by all the application</li>
  <li>a per-document catalog, this one is built if the document uses the
    <code>oasis-xml-catalog</code> PIs to specify its own catalog list, it is
    associated to the parser context and destroyed when the parsing context
    is destroyed.</li>
</ul>

<p>the document one will be used first if it exists.</p>

<h4>Initialization routines:</h4>

<p>xmlInitializeCatalog(), xmlLoadCatalog() and xmlLoadCatalogs() should be
used at startup to initialize the catalog, if the catalog should be
initialized with specific values xmlLoadCatalog()  or xmlLoadCatalogs()
should be called before xmlInitializeCatalog() which would otherwise do a
default initialization first.</p>

<p>The xmlCatalogAddLocal() call is used by the parser to grow the document
own catalog list if needed.</p>

<h4>Preferences setup:</h4>

<p>The XML Catalog spec requires the possibility to select default
preferences between  public and system delegation,
xmlCatalogSetDefaultPrefer() allows this, xmlCatalogSetDefaults() and
xmlCatalogGetDefaults() allow to control  if XML Catalogs resolution should
be forbidden, allowed for global catalog, for document catalog or both, the
default is to allow both.</p>

<p>And of course xmlCatalogSetDebug() allows to generate debug messages
(through the xmlGenericError() mechanism).</p>

<h4>Querying routines:</h4>

<p>xmlCatalogResolve(), xmlCatalogResolveSystem(), xmlCatalogResolvePublic()
and xmlCatalogResolveURI() are relatively explicit if you read the XML
Catalog specification they correspond to section 7 algorithms, they should
also work if you have loaded an SGML catalog with a simplified semantic.</p>

<p>xmlCatalogLocalResolve() and xmlCatalogLocalResolveURI() are the same but
operate on the document catalog list</p>

<h4>Cleanup and Miscellaneous:</h4>

<p>xmlCatalogCleanup() free-up the global catalog, xmlCatalogFreeLocal() is
the per-document equivalent.</p>

<p>xmlCatalogAdd() and xmlCatalogRemove() are used to dynamically modify the
first catalog in the global list, and xmlCatalogDump() allows to dump a
catalog state, those routines are primarily designed for xmlcatalog, I'm not
sure that exposing more complex interfaces (like navigation ones) would be
really useful.</p>

<p>The xmlParseCatalogFile() is a function used to load XML Catalog files,
it's similar as xmlParseFile() except it bypass all catalog lookups, it's
provided because this functionality may be useful for client tools.</p>

<h4>threaded environments:</h4>

<p>Since the catalog tree is built progressively, some care has been taken to
try to avoid troubles in multithreaded environments. The code is now thread
safe assuming that the libxml2 library has been compiled with threads
support.</p>

<p></p>

<h3><a name="Other">Other resources</a></h3>

<p>The XML Catalog specification is relatively recent so there isn't much
literature to point at:</p>
<ul>
  <li>You can find a good rant from Norm Walsh about <a
    href="http://www.arbortext.com/Think_Tank/XML_Resources/Issue_Three/issue_three.html">the
    need for catalogs</a>, it provides a lot of context information even if
    I don't agree with everything presented. Norm also wrote a more recent
    article <a
    href="http://wwws.sun.com/software/xml/developers/resolver/article/">XML
    entities and URI resolvers</a> describing them.</li>
  <li>An <a href="http://home.ccil.org/~cowan/XML/XCatalog.html">old XML
    catalog proposal</a> from John Cowan</li>
  <li>The <a href="http://www.rddl.org/">Resource Directory Description
    Language</a> (RDDL) another catalog system but more oriented toward
    providing metadata for XML namespaces.</li>
  <li>the page from the OASIS Technical <a
    href="http://www.oasis-open.org/committees/entity/">Committee on Entity
    Resolution</a> who maintains XML Catalog, you will find pointers to the
    specification update, some background and pointers to others tools
    providing XML Catalog support</li>
  <li>There is a <a href="buildDocBookCatalog">shell script</a> to generate
    XML Catalogs for DocBook 4.1.2 . If it can write to the /etc/xml/
    directory, it will set-up /etc/xml/catalog and /etc/xml/docbook based on
    the resources found on the system. Otherwise it will just create
    ~/xmlcatalog and ~/dbkxmlcatalog and doing:
    <p><code>export XML_CATALOG_FILES=$HOME/xmlcatalog</code></p>
    <p>should allow to process DocBook documentations without requiring
    network accesses for the DTD or stylesheets</p>
  </li>
  <li>I have uploaded <a href="ftp://xmlsoft.org/libxml2/test/dbk412catalog.tar.gz">a
    small tarball</a> containing XML Catalogs for DocBook 4.1.2 which seems
    to work fine for me too</li>
  <li>The <a href="http://www.xmlsoft.org/xmlcatalog_man.html">xmlcatalog
    manual page</a></li>
</ul>

<p>If you have suggestions for corrections or additions, simply contact
me:</p>

<h2><a name="library">The parser interfaces</a></h2>

<p>This section is directly intended to help programmers getting bootstrapped
using the XML tollkit from the C language. It is not intended to be
extensive. I hope the automatically generated documents will provide the
completeness required, but as a separate set of documents. The interfaces of
the XML parser are by principle low level, Those interested in a higher level
API should <a href="#DOM">look at DOM</a>.</p>

<p>The <a href="html/libxml-parser.html">parser interfaces for XML</a> are
separated from the <a href="html/libxml-htmlparser.html">HTML parser
interfaces</a>.  Let's have a look at how the XML parser can be called:</p>

<h3><a name="Invoking">Invoking the parser : the pull method</a></h3>

<p>Usually, the first thing to do is to read an XML input. The parser accepts
documents either from in-memory strings or from files.  The functions are
defined in "parser.h":</p>
<dl>
  <dt><code>xmlDocPtr xmlParseMemory(char *buffer, int size);</code></dt>
    <dd><p>Parse a null-terminated string containing the document.</p>
    </dd>
</dl>
<dl>
  <dt><code>xmlDocPtr xmlParseFile(const char *filename);</code></dt>
    <dd><p>Parse an XML document contained in a (possibly compressed)
      file.</p>
    </dd>
</dl>

<p>The parser returns a pointer to the document structure (or NULL in case of
failure).</p>

<h3 id="Invoking1">Invoking the parser: the push method</h3>

<p>In order for the application to keep the control when the document is
being fetched (which is common for GUI based programs) libxml2 provides a
push interface, too, as of version 1.8.3. Here are the interface
functions:</p>
<pre>xmlParserCtxtPtr xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
                                         void *user_data,
                                         const char *chunk,
                                         int size,
                                         const char *filename);
int              xmlParseChunk          (xmlParserCtxtPtr ctxt,
                                         const char *chunk,
                                         int size,
                                         int terminate);</pre>

<p>and here is a simple example showing how to use the interface:</p>
<pre>            FILE *f;

            f = fopen(filename, "r");
            if (f != NULL) {
                int res, size = 1024;
                char chars[1024];
                xmlParserCtxtPtr ctxt;

                res = fread(chars, 1, 4, f);
                if (res &gt; 0) {
                    ctxt = xmlCreatePushParserCtxt(NULL, NULL,
                                chars, res, filename);
                    while ((res = fread(chars, 1, size, f)) &gt; 0) {
                        xmlParseChunk(ctxt, chars, res, 0);
                    }
                    xmlParseChunk(ctxt, chars, 0, 1);
                    doc = ctxt-&gt;myDoc;
                    xmlFreeParserCtxt(ctxt);
                }
            }</pre>

<p>The HTML parser embedded into libxml2 also has a push interface; the
functions are just prefixed by "html" rather than "xml".</p>

<h3 id="Invoking2">Invoking the parser: the SAX interface</h3>

<p>The tree-building interface makes the parser memory-hungry, first loading
the document in memory and then building the tree itself. Reading a document
without building the tree is possible using the SAX interfaces (see SAX.h and
<a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">James
Henstridge's documentation</a>). Note also that the push interface can be
limited to SAX: just use the two first arguments of
<code>xmlCreatePushParserCtxt()</code>.</p>

<h3><a name="Building">Building a tree from scratch</a></h3>

<p>The other way to get an XML tree in memory is by building it. Basically
there is a set of functions dedicated to building new elements. (These are
also described in &lt;libxml/tree.h&gt;.) For example, here is a piece of
code that produces the XML document used in the previous examples:</p>
<pre>    #include &lt;libxml/tree.h&gt;
    xmlDocPtr doc;
    xmlNodePtr tree, subtree;

    doc = xmlNewDoc("1.0");
    doc-&gt;children = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL);
    xmlSetProp(doc-&gt;children, "prop1", "gnome is great");
    xmlSetProp(doc-&gt;children, "prop2", "&amp; linux too");
    tree = xmlNewChild(doc-&gt;children, NULL, "head", NULL);
    subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome");
    tree = xmlNewChild(doc-&gt;children, NULL, "chapter", NULL);
    subtree = xmlNewChild(tree, NULL, "title", "The Linux adventure");
    subtree = xmlNewChild(tree, NULL, "p", "bla bla bla ...");
    subtree = xmlNewChild(tree, NULL, "image", NULL);
    xmlSetProp(subtree, "href", "linus.gif");</pre>

<p>Not really rocket science ...</p>

<h3><a name="Traversing">Traversing the tree</a></h3>

<p>Basically by <a href="html/libxml-tree.html">including "tree.h"</a> your
code has access to the internal structure of all the elements of the tree.
The names should be somewhat simple like <strong>parent</strong>,
<strong>children</strong>, <strong>next</strong>, <strong>prev</strong>,
<strong>properties</strong>, etc... For example, still with the previous
example:</p>
<pre><code>doc-&gt;children-&gt;children-&gt;children</code></pre>

<p>points to the title element,</p>
<pre>doc-&gt;children-&gt;children-&gt;next-&gt;children-&gt;children</pre>

<p>points to the text node containing the chapter title "The Linux
adventure".</p>

<p><strong>NOTE</strong>: XML allows <em>PI</em>s and <em>comments</em> to be
present before the document root, so <code>doc-&gt;children</code> may point
to an element which is not the document Root Element; a function
<code>xmlDocGetRootElement()</code> was added for this purpose.</p>

<h3><a name="Modifying">Modifying the tree</a></h3>

<p>Functions are provided for reading and writing the document content. Here
is an excerpt from the <a href="html/libxml-tree.html">tree API</a>:</p>
<dl>
  <dt><code>xmlAttrPtr xmlSetProp(xmlNodePtr node, const xmlChar *name, const
  xmlChar *value);</code></dt>
    <dd><p>This sets (or changes) an attribute carried by an ELEMENT node.
      The value can be NULL.</p>
    </dd>
</dl>
<dl>
  <dt><code>const xmlChar *xmlGetProp(xmlNodePtr node, const xmlChar
  *name);</code></dt>
    <dd><p>This function returns a pointer to new copy of the property
      content. Note that the user must deallocate the result.</p>
    </dd>
</dl>

<p>Two functions are provided for reading and writing the text associated
with elements:</p>
<dl>
  <dt><code>xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const xmlChar
  *value);</code></dt>
    <dd><p>This function takes an "external" string and converts it to one
      text node or possibly to a list of entity and text nodes. All
      non-predefined entity references like &amp;Gnome; will be stored
      internally as entity nodes, hence the result of the function may not be
      a single node.</p>
    </dd>
</dl>
<dl>
  <dt><code>xmlChar *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int
  inLine);</code></dt>
    <dd><p>This function is the inverse of
      <code>xmlStringGetNodeList()</code>. It generates a new string
      containing the content of the text and entity nodes. Note the extra
      argument inLine. If this argument is set to 1, the function will expand
      entity references.  For example, instead of returning the &amp;Gnome;
      XML encoding in the string, it will substitute it with its value (say,
      "GNU Network Object Model Environment").</p>
    </dd>
</dl>

<h3><a name="Saving">Saving a tree</a></h3>

<p>Basically 3 options are possible:</p>
<dl>
  <dt><code>void xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int
  *size);</code></dt>
    <dd><p>Returns a buffer into which the document has been saved.</p>
    </dd>
</dl>
<dl>
  <dt><code>extern void xmlDocDump(FILE *f, xmlDocPtr doc);</code></dt>
    <dd><p>Dumps a document to an open file descriptor.</p>
    </dd>
</dl>
<dl>
  <dt><code>int xmlSaveFile(const char *filename, xmlDocPtr cur);</code></dt>
    <dd><p>Saves the document to a file. In this case, the compression
      interface is triggered if it has been turned on.</p>
    </dd>
</dl>

<h3><a name="Compressio">Compression</a></h3>

<p>The library transparently handles compression when doing file-based
accesses. The level of compression on saves can be turned on either globally
or individually for one file:</p>
<dl>
  <dt><code>int  xmlGetDocCompressMode (xmlDocPtr doc);</code></dt>
    <dd><p>Gets the document compression ratio (0-9).</p>
    </dd>
</dl>
<dl>
  <dt><code>void xmlSetDocCompressMode (xmlDocPtr doc, int mode);</code></dt>
    <dd><p>Sets the document compression ratio.</p>
    </dd>
</dl>
<dl>
  <dt><code>int  xmlGetCompressMode(void);</code></dt>
    <dd><p>Gets the default compression ratio.</p>
    </dd>
</dl>
<dl>
  <dt><code>void xmlSetCompressMode(int mode);</code></dt>
    <dd><p>Sets the default compression ratio.</p>
    </dd>
</dl>

<h2><a name="Entities">Entities or no entities</a></h2>

<p>Entities in principle are similar to simple C macros. An entity defines an
abbreviation for a given string that you can reuse many times throughout the
content of your document. Entities are especially useful when a given string
may occur frequently within a document, or to confine the change needed to a
document to a restricted area in the internal subset of the document (at the
beginning). Example:</p>
<pre>1 &lt;?xml version="1.0"?&gt;
2 &lt;!DOCTYPE EXAMPLE SYSTEM "example.dtd" [
3 &lt;!ENTITY xml "Extensible Markup Language"&gt;
4 ]&gt;
5 &lt;EXAMPLE&gt;
6    &amp;xml;
7 &lt;/EXAMPLE&gt;</pre>

<p>Line 3 declares the xml entity. Line 6 uses the xml entity, by prefixing
its name with '&amp;' and following it by ';' without any spaces added. There
are 5 predefined entities in libxml2 allowing you to escape characters with
predefined meaning in some parts of the xml document content:
<strong>&amp;lt;</strong> for the character '&lt;', <strong>&amp;gt;</strong>
for the character '&gt;',  <strong>&amp;apos;</strong> for the character ''',
<strong>&amp;quot;</strong> for the character '"', and
<strong>&amp;amp;</strong> for the character '&amp;'.</p>

<p>One of the problems related to entities is that you may want the parser to
substitute an entity's content so that you can see the replacement text in
your application. Or you may prefer to keep entity references as such in the
content to be able to save the document back without losing this usually
precious information (if the user went through the pain of explicitly
defining entities, he may have a a rather negative attitude if you blindly
substitute them as saving time). The <a
href="html/libxml-parser.html#xmlSubstituteEntitiesDefault">xmlSubstituteEntitiesDefault()</a>
function allows you to check and change the behaviour, which is to not
substitute entities by default.</p>

<p>Here is the DOM tree built by libxml2 for the previous document in the
default case:</p>
<pre>/gnome/src/gnome-xml -&gt; ./xmllint --debug test/ent1
DOCUMENT
version=1.0
   ELEMENT EXAMPLE
     TEXT
     content=
     ENTITY_REF
       INTERNAL_GENERAL_ENTITY xml
       content=Extensible Markup Language
     TEXT
     content=</pre>

<p>And here is the result when substituting entities:</p>
<pre>/gnome/src/gnome-xml -&gt; ./tester --debug --noent test/ent1
DOCUMENT
version=1.0
   ELEMENT EXAMPLE
     TEXT
     content=     Extensible Markup Language</pre>

<p>So, entities or no entities? Basically, it depends on your use case. I
suggest that you keep the non-substituting default behaviour and avoid using
entities in your XML document or data if you are not willing to handle the
entity references elements in the DOM tree.</p>

<p>Note that at save time libxml2 enforces the conversion of the predefined
entities where necessary to prevent well-formedness problems, and will also
transparently replace those with chars (i.e. it will not generate entity
reference elements in the DOM tree or call the reference() SAX callback when
finding them in the input).</p>

<p><span style="background-color: #FF0000">WARNING</span>: handling entities
on top of the libxml2 SAX interface is difficult!!! If you plan to use
non-predefined entities in your documents, then the learning curve to handle
then using the SAX API may be long. If you plan to use complex documents, I
strongly suggest you consider using the DOM interface instead and let libxml
deal with the complexity rather than trying to do it yourself.</p>

<h2><a name="Namespaces">Namespaces</a></h2>

<p>The libxml2 library implements <a
href="http://www.w3.org/TR/REC-xml-names/">XML namespaces</a> support by
recognizing namespace constructs in the input, and does namespace lookup
automatically when building the DOM tree. A namespace declaration is
associated with an in-memory structure and all elements or attributes within
that namespace point to it. Hence testing the namespace is a simple and fast
equality operation at the user level.</p>

<p>I suggest that people using libxml2 use a namespace, and declare it in the
root element of their document as the default namespace. Then they don't need
to use the prefix in the content but we will have a basis for future semantic
refinement and  merging of data from different sources. This doesn't increase
the size of the XML output significantly, but significantly increases its
value in the long-term. Example:</p>
<pre>&lt;mydoc xmlns="http://mydoc.example.org/schemas/"&gt;
   &lt;elem1&gt;...&lt;/elem1&gt;
   &lt;elem2&gt;...&lt;/elem2&gt;
&lt;/mydoc&gt;</pre>

<p>The namespace value has to be an absolute URL, but the URL doesn't have to
point to any existing resource on the Web. It will bind all the element and
attributes with that URL. I suggest to use an URL within a domain you
control, and that the URL should contain some kind of version information if
possible. For example, <code>"http://www.gnome.org/gnumeric/1.0/"</code> is a
good namespace scheme.</p>

<p>Then when you load a file, make sure that a namespace carrying the
version-independent prefix is installed on the root element of your document,
and if the version information don't match something you know, warn the user
and be liberal in what you accept as the input. Also do *not* try to base
namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
same as &lt;bar:text&gt; in another document. What really matters is the URI
associated with the element or the attribute, not the prefix string (which is
just a shortcut for the full URI). In libxml, element and attributes have an
<code>ns</code> field pointing to an xmlNs structure detailing the namespace
prefix and its URI.</p>

<p>@@Interfaces@@</p>
<pre>xmlNodePtr node;
if(!strncmp(node-&gt;name,"mytag",5)
  &amp;&amp; node-&gt;ns
  &amp;&amp; !strcmp(node-&gt;ns-&gt;href,"http://www.mysite.com/myns/1.0")) {
  ...
}</pre>

<p>Usually people object to using namespaces together with validity checking.
I will try to make sure that using namespaces won't break validity checking,
so even if you plan to use or currently are using validation I strongly
suggest adding namespaces to your document. A default namespace scheme
<code>xmlns="http://...."</code> should not break validity even on less
flexible parsers. Using namespaces to mix and differentiate content coming
from multiple DTDs will certainly break current validation schemes. To check
such documents one needs to use schema-validation, which is supported in
libxml2 as well. See <a href="http://www.relaxng.org/">relagx-ng</a> and <a
href="http://www.w3c.org/XML/Schema">w3c-schema</a>.</p>

<h2><a name="Upgrading">Upgrading 1.x code</a></h2>

<p>Incompatible changes:</p>

<p>Version 2 of libxml2 is the first version introducing serious backward
incompatible changes. The main goals were:</p>
<ul>
  <li>a general cleanup. A number of mistakes inherited from the very early
    versions couldn't be changed due to compatibility constraints. Example
    the "childs" element in the nodes.</li>
  <li>Uniformization of the various nodes, at least for their header and link
    parts (doc, parent, children, prev, next), the goal is a simpler
    programming model and simplifying the task of the DOM implementors.</li>
  <li>better conformances to the XML specification, for example version 1.x
    had an heuristic to try to detect ignorable white spaces. As a result the
    SAX event generated were ignorableWhitespace() while the spec requires
    character() in that case. This also mean that a number of DOM node
    containing blank text may populate the DOM tree which were not present
    before.</li>
</ul>

<h3>How to fix libxml-1.x code:</h3>

<p>So client code of libxml designed to run with version 1.x may have to be
changed to compile against version 2.x of libxml. Here is a list of changes
that I have collected, they may not be sufficient, so in case you find other
change which are required, <a href="mailto:Daniel.Veillard@w3.org">drop me a
mail</a>:</p>
<ol>
  <li>The package name have changed from libxml to libxml2, the library name
    is now -lxml2 . There is a new xml2-config script which should be used to
    select the right parameters libxml2</li>
  <li>Node <strong>childs</strong> field has been renamed
    <strong>children</strong> so s/childs/children/g should be  applied
    (probability of having "childs" anywhere else is close to 0+</li>
  <li>The document don't have anymore a <strong>root</strong> element it has
    been replaced by <strong>children</strong> and usually you will get a
    list of element here. For example a Dtd element for the internal subset
    and it's declaration may be found in that list, as well as processing
    instructions or comments found before or after the document root element.
    Use <strong>xmlDocGetRootElement(doc)</strong> to get the root element of
    a document. Alternatively if you are sure to not reference DTDs nor have
    PIs or comments before or after the root element
    s/-&gt;root/-&gt;children/g will probably do it.</li>
  <li>The white space issue, this one is more complex, unless special case of
    validating parsing, the line breaks and spaces usually used for indenting
    and formatting the document content becomes significant. So they are
    reported by SAX and if your using the DOM tree, corresponding nodes are
    generated. Too approach can be taken:
    <ol>
      <li>lazy one, use the compatibility call
        <strong>xmlKeepBlanksDefault(0)</strong> but be aware that you are
        relying on a special (and possibly broken) set of heuristics of
        libxml to detect ignorable blanks. Don't complain if it breaks or
        make your application not 100% clean w.r.t. to it's input.</li>
      <li>the Right Way: change you code to accept possibly insignificant
        blanks characters, or have your tree populated with weird blank text
        nodes. You can spot them using the commodity function
        <strong>xmlIsBlankNode(node)</strong> returning 1 for such blank
        nodes.</li>
    </ol>
    <p>Note also that with the new default the output functions don't add any
    extra indentation when saving a tree in order to be able to round trip
    (read and save) without inflating the document with extra formatting
    chars.</p>
  </li>
  <li>The include path has changed to $prefix/libxml/ and the includes
    themselves uses this new prefix in includes instructions... If you are
    using (as expected) the
    <pre>xml2-config --cflags</pre>
    <p>output to generate you compile commands this will probably work out of
    the box</p>
  </li>
  <li>xmlDetectCharEncoding takes an extra argument indicating the length in
    byte of the head of the document available for character detection.</li>
</ol>

<h3>Ensuring both libxml-1.x and libxml-2.x compatibility</h3>

<p>Two new version of libxml (1.8.11) and libxml2 (2.3.4) have been released
to allow smooth upgrade of existing libxml v1code while retaining
compatibility. They offers the following:</p>
<ol>
  <li>similar include naming, one should use
    <strong>#include&lt;libxml/...&gt;</strong> in both cases.</li>
  <li>similar identifiers defined via macros for the child and root fields:
    respectively <strong>xmlChildrenNode</strong> and
    <strong>xmlRootNode</strong></li>
  <li>a new macro <strong>LIBXML_TEST_VERSION</strong> which should be
    inserted once in the client code</li>
</ol>

<p>So the roadmap to upgrade your existing libxml applications is the
following:</p>
<ol>
  <li>install the  libxml-1.8.8 (and libxml-devel-1.8.8) packages</li>
  <li>find all occurrences where the xmlDoc <strong>root</strong> field is
    used and change it to <strong>xmlRootNode</strong></li>
  <li>similarly find all occurrences where the xmlNode
    <strong>childs</strong> field is used and change it to
    <strong>xmlChildrenNode</strong></li>
  <li>add a <strong>LIBXML_TEST_VERSION</strong> macro somewhere in your
    <strong>main()</strong> or in the library init entry point</li>
  <li>Recompile, check compatibility, it should still work</li>
  <li>Change your configure script to look first for xml2-config and fall
    back using xml-config . Use the --cflags and --libs output of the command
    as the Include and Linking parameters needed to use libxml.</li>
  <li>install libxml2-2.3.x and  libxml2-devel-2.3.x (libxml-1.8.y and
    libxml-devel-1.8.y can be kept simultaneously)</li>
  <li>remove your config.cache, relaunch your configuration mechanism, and
    recompile, if steps 2 and 3 were done right it should compile as-is</li>
  <li>Test that your application is still running correctly, if not this may
    be due to extra empty nodes due to formatting spaces being kept in libxml2
    contrary to libxml1, in that case insert xmlKeepBlanksDefault(1) in your
    code before calling the parser (next to
    <strong>LIBXML_TEST_VERSION</strong> is a fine place).</li>
</ol>

<p>Following those steps should work. It worked for some of my own code.</p>

<p>Let me put some emphasis on the fact that there is far more changes from
libxml 1.x to 2.x than the ones you may have to patch for. The overall code
has been considerably cleaned up and the conformance to the XML specification
has been drastically improved too. Don't take those changes as an excuse to
not upgrade, it may cost a lot on the long term ...</p>

<h2><a name="Thread">Thread safety</a></h2>

<p>Starting with 2.4.7, libxml2 makes provisions to ensure that concurrent
threads can safely work in parallel parsing different documents. There is
however a couple of things to do to ensure it:</p>
<ul>
  <li>configure the library accordingly using the --with-threads options</li>
  <li>call xmlInitParser() in the "main" thread before using any of the
    libxml2 API (except possibly selecting a different memory allocator)</li>
</ul>

<p>Note that the thread safety cannot be ensured for multiple threads sharing
the same document, the locking must be done at the application level, libxml
exports a basic mutex and reentrant mutexes API in &lt;libxml/threads.h&gt;.
The parts of the library checked for thread safety are:</p>
<ul>
  <li>concurrent loading</li>
  <li>file access resolution</li>
  <li>catalog access</li>
  <li>catalog building</li>
  <li>entities lookup/accesses</li>
  <li>validation</li>
  <li>global variables per-thread override</li>
  <li>memory handling</li>
</ul>

<p>XPath has been tested for threaded usage on non-modified document
   for example when using libxslt, but make 100% sure the documents
   are accessed read-only !</p>

<h2><a name="DOM"></a><a name="Principles">DOM Principles</a></h2>

<p><a href="http://www.w3.org/DOM/">DOM</a> stands for the <em>Document
Object Model</em>; this is an API for accessing XML or HTML structured
documents. Native support for DOM in Gnome is on the way (module gnome-dom),
and will be based on gnome-xml. This will be a far cleaner interface to
manipulate XML files within Gnome since it won't expose the internal
structure.</p>

<p>The current DOM implementation on top of libxml2 is the <a
href="http://svn.gnome.org/viewvc/gdome2/trunk/">gdome2 Gnome module</a>, this
is a full DOM interface, thanks to Paolo Casarini, check the <a
href="http://gdome2.cs.unibo.it/">Gdome2 homepage</a> for more
information.</p>

<h2><a name="Example"></a><a name="real">A real example</a></h2>

<p>Here is a real size example, where the actual content of the application
data is not kept in the DOM tree but uses internal structures. It is based on
a proposal to keep a database of jobs related to Gnome, with an XML based
storage structure. Here is an <a href="gjobs.xml">XML encoded jobs
base</a>:</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;gjob:Helping xmlns:gjob="http://www.gnome.org/some-location"&gt;
  &lt;gjob:Jobs&gt;

    &lt;gjob:Job&gt;
      &lt;gjob:Project ID="3"/&gt;
      &lt;gjob:Application&gt;GBackup&lt;/gjob:Application&gt;
      &lt;gjob:Category&gt;Development&lt;/gjob:Category&gt;

      &lt;gjob:Update&gt;
        &lt;gjob:Status&gt;Open&lt;/gjob:Status&gt;
        &lt;gjob:Modified&gt;Mon, 07 Jun 1999 20:27:45 -0400 MET DST&lt;/gjob:Modified&gt;
        &lt;gjob:Salary&gt;USD 0.00&lt;/gjob:Salary&gt;
      &lt;/gjob:Update&gt;

      &lt;gjob:Developers&gt;
        &lt;gjob:Developer&gt;
        &lt;/gjob:Developer&gt;
      &lt;/gjob:Developers&gt;

      &lt;gjob:Contact&gt;
        &lt;gjob:Person&gt;Nathan Clemons&lt;/gjob:Person&gt;
        &lt;gjob:Email&gt;nathan@windsofstorm.net&lt;/gjob:Email&gt;
        &lt;gjob:Company&gt;
        &lt;/gjob:Company&gt;
        &lt;gjob:Organisation&gt;
        &lt;/gjob:Organisation&gt;
        &lt;gjob:Webpage&gt;
        &lt;/gjob:Webpage&gt;
        &lt;gjob:Snailmail&gt;
        &lt;/gjob:Snailmail&gt;
        &lt;gjob:Phone&gt;
        &lt;/gjob:Phone&gt;
      &lt;/gjob:Contact&gt;

      &lt;gjob:Requirements&gt;
      The program should be released as free software, under the GPL.
      &lt;/gjob:Requirements&gt;

      &lt;gjob:Skills&gt;
      &lt;/gjob:Skills&gt;

      &lt;gjob:Details&gt;
      A GNOME based system that will allow a superuser to configure 
      compressed and uncompressed files and/or file systems to be backed 
      up with a supported media in the system.  This should be able to 
      perform via find commands generating a list of files that are passed 
      to tar, dd, cpio, cp, gzip, etc., to be directed to the tape machine 
      or via operations performed on the filesystem itself. Email 
      notification and GUI status display very important.
      &lt;/gjob:Details&gt;

    &lt;/gjob:Job&gt;

  &lt;/gjob:Jobs&gt;
&lt;/gjob:Helping&gt;</pre>

<p>While loading the XML file into an internal DOM tree is a matter of
calling only a couple of functions, browsing the tree to gather the data and
generate the internal structures is harder, and more error prone.</p>

<p>The suggested principle is to be tolerant with respect to the input
structure. For example, the ordering of the attributes is not significant,
the XML specification is clear about it. It's also usually a good idea not to
depend on the order of the children of a given node, unless it really makes
things harder. Here is some code to parse the information for a person:</p>
<pre>/*
 * A person record
 */
typedef struct person {
    char *name;
    char *email;
    char *company;
    char *organisation;
    char *smail;
    char *webPage;
    char *phone;
} person, *personPtr;

/*
 * And the code needed to parse it
 */
personPtr parsePerson(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
    personPtr ret = NULL;

DEBUG("parsePerson\n");
    /*
     * allocate the struct
     */
    ret = (personPtr) malloc(sizeof(person));
    if (ret == NULL) {
        fprintf(stderr,"out of memory\n");
        return(NULL);
    }
    memset(ret, 0, sizeof(person));

    /* We don't care what the top level element name is */
    cur = cur-&gt;xmlChildrenNode;
    while (cur != NULL) {
        if ((!strcmp(cur-&gt;name, "Person")) &amp;&amp; (cur-&gt;ns == ns))
            ret-&gt;name = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
        if ((!strcmp(cur-&gt;name, "Email")) &amp;&amp; (cur-&gt;ns == ns))
            ret-&gt;email = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
        cur = cur-&gt;next;
    }

    return(ret);
}</pre>

<p>Here are a couple of things to notice:</p>
<ul>
  <li>Usually a recursive parsing style is the more convenient one: XML data
    is by nature subject to repetitive constructs and usually exhibits highly
    structured patterns.</li>
  <li>The two arguments of type <em>xmlDocPtr</em> and <em>xmlNsPtr</em>,
    i.e. the pointer to the global XML document and the namespace reserved to
    the application. Document wide information are needed for example to
    decode entities and it's a good coding practice to define a namespace for
    your application set of data and test that the element and attributes
    you're analyzing actually pertains to your application space. This is
    done by a simple equality test (cur-&gt;ns == ns).</li>
  <li>To retrieve text and attributes value, you can use the function
    <em>xmlNodeListGetString</em> to gather all the text and entity reference
    nodes generated by the DOM output and produce an single text string.</li>
</ul>

<p>Here is another piece of code used to parse another level of the
structure:</p>
<pre>#include &lt;libxml/tree.h&gt;
/*
 * a Description for a Job
 */
typedef struct job {
    char *projectID;
    char *application;
    char *category;
    personPtr contact;
    int nbDevelopers;
    personPtr developers[100]; /* using dynamic alloc is left as an exercise */
} job, *jobPtr;

/*
 * And the code needed to parse it
 */
jobPtr parseJob(xmlDocPtr doc, xmlNsPtr ns, xmlNodePtr cur) {
    jobPtr ret = NULL;

DEBUG("parseJob\n");
    /*
     * allocate the struct
     */
    ret = (jobPtr) malloc(sizeof(job));
    if (ret == NULL) {
        fprintf(stderr,"out of memory\n");
        return(NULL);
    }
    memset(ret, 0, sizeof(job));

    /* We don't care what the top level element name is */
    cur = cur-&gt;xmlChildrenNode;
    while (cur != NULL) {
        
        if ((!strcmp(cur-&gt;name, "Project")) &amp;&amp; (cur-&gt;ns == ns)) {
            ret-&gt;projectID = xmlGetProp(cur, "ID");
            if (ret-&gt;projectID == NULL) {
                fprintf(stderr, "Project has no ID\n");
            }
        }
        if ((!strcmp(cur-&gt;name, "Application")) &amp;&amp; (cur-&gt;ns == ns))
            ret-&gt;application = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
        if ((!strcmp(cur-&gt;name, "Category")) &amp;&amp; (cur-&gt;ns == ns))
            ret-&gt;category = xmlNodeListGetString(doc, cur-&gt;xmlChildrenNode, 1);
        if ((!strcmp(cur-&gt;name, "Contact")) &amp;&amp; (cur-&gt;ns == ns))
            ret-&gt;contact = parsePerson(doc, ns, cur);
        cur = cur-&gt;next;
    }

    return(ret);
}</pre>

<p>Once you are used to it, writing this kind of code is quite simple, but
boring. Ultimately, it could be possible to write stubbers taking either C
data structure definitions, a set of XML examples or an XML DTD and produce
the code needed to import and export the content between C data and XML
storage. This is left as an exercise to the reader :-)</p>

<p>Feel free to use <a href="example/gjobread.c">the code for the full C
parsing example</a> as a template, it is also available with Makefile in the
Gnome SVN base under libxml2/example</p>

<h2><a name="Contributi">Contributions</a></h2>
<ul>
  <li>Bjorn Reese, William Brack and Thomas Broyer have provided a number of
    patches, Gary Pennington worked on the validation API, threading support
    and Solaris port.</li>
  <li>John Fleck helps maintaining the documentation and man pages.</li>
  <li><a href="mailto:igor@zlatkovic.com">Igor  Zlatkovic</a> is now the
    maintainer of the Windows port, <a
    href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
    binaries</a></li>
  <li><a href="mailto:Gary.Pennington@sun.com">Gary Pennington</a> provides
    <a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
  <li><a
    href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
    Sergeant</a> developed <a
    href="http://axkit.org/download/">XML::LibXSLT</a>, a Perl wrapper for
    libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML
    application server</a></li>
  <li><a href="mailto:fnatter@gmx.net">Felix Natter</a> and <a
    href="mailto:geertk@ai.rug.nl">Geert Kloosterman</a> provide <a
    href="libxml-doc.el">an emacs module</a> to lookup libxml(2) functions
    documentation</li>
  <li><a href="mailto:sherwin@nlm.nih.gov">Ziying Sherwin</a> provided <a
    href="http://xmlsoft.org/messages/0488.html">man pages</a></li>
  <li>there is a module for <a
    href="http://acs-misc.sourceforge.net/nsxml.html">libxml/libxslt support
    in OpenNSD/AOLServer</a></li>
  <li><a href="mailto:dkuhlman@cutter.rexx.com">Dave Kuhlman</a> provided the
    first version of libxml/libxslt <a
    href="http://www.rexx.com/~dkuhlman">wrappers for Python</a></li>
  <li>Petr Kozelka provides <a
    href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
    libxml2</a> with Kylix and Delphi and other Pascal compilers</li>
  <li><a href="mailto:aleksey@aleksey.com">Aleksey Sanin</a> implemented the
    <a href="http://www.w3.org/Signature/">XML Canonicalization and XML
    Digital Signature</a> <a
    href="http://www.aleksey.com/xmlsec/">implementations for libxml2</a></li>
  <li><a href="mailto:Steve.Ball@explain.com.au">Steve Ball</a> and
    contributors maintain <a href="http://tclxml.sourceforge.net/">tcl
    bindings for libxml2 and libxslt</a>, as well as <a
    href="http://tclxml.sf.net/tkxmllint.html">tkxmllint</a> a GUI for
    xmllint and <a href="http://tclxml.sf.net/tkxsltproc.html">tkxsltproc</a>
    a GUI for xsltproc.</li>
</ul>

<p></p>
</body>
</html>
