<!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 name="GENERATOR" content="amaya 8.5, see http://www.w3.org/Amaya/">
  <meta http-equiv="Content-Type" content="text/html">
</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.daa.com.au/~james/gnome/xml-sax/xml-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="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">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 have a few person 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="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">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 on bugzilla</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="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">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="http://git.gnome.org/cgit/libxml2/">libxml2 Git web</a>.
         To checkout a local tree use:</p>
       <pre>git clone git://git.gnome.org/libxml2</pre>
  </li>
  <li>The <strong>libxslt</strong> module is also present there</li>
</ul>

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

<p>Items not finished and worked on, get in touch with the list if you want
to help those</p>
<ul>
  <li>More testing on RelaxNG</li>
  <li>Finishing up <a href="http://www.w3.org/TR/xmlschema-1/">XML
  Schemas</a></li>
</ul>

<p>The <a href="ChangeLog.html">change log</a> describes the recents commits
to the <a href="http://svn.gnome.org/viewvc/libxml2/trunk/">SVN</a> code base.</p>

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

<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 accomodate 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 regresion 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 cant 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 dictionnaries (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 realted 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 ouptut
      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_familly 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 destry 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
      crasher, 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), disapearing 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 dataype
    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 dependancies 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), wilcard in Schemas (Kasimier), URI composition (William),
    xs:anyType in Schemas (Kasimier), Python resolver emmitting 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 dependancy 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 brokeness 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 dictionnaries
    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, dictionnary 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 descritpion
    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 adressing 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
    genrate 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, recusive extention
    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
    dependancy, 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), dictionnary 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 dictionnaries 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
    dependancies (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 offest in
    input.</li>
</ul>

<h3>2.6.5: Jan 25 2004</h3>
<ul>
  <li>Bugfixes: dictionnaries 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 dictionnary
    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 dictionnary 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 dictionnary, allocate names and small
    text nodes from the dictionnary</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
    easilly 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 dictionnary, --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 Borgström</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 blocs</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 fof 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 developped <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://codespeak.net/lxml/">lxml the more pythonic bindings for libxml2
and libxslt</a> and <a
href="http://codespeak.net/mailman/listinfo/lxml-dev">help Martijn
Faassen</a> complete those.</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.daa.com.au/~james/gnome/xml-sax/xml-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ès&gt;là&lt;/trè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é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ès&gt;là&lt;/très&gt;
   ^
err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
&lt;très&gt;là&lt;/trè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:</p>
<pre>~/XML -&gt; ./xmllint isolat1 
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;très&gt;là&lt;/trè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 formating 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 is supposed to be thread safe now, but this wasn't tested
seriously.</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>
