<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="SHORTCUT ICON" href="/favicon.ico">
<style type="text/css"><!--
TD {font-family: Verdana,Arial,Helvetica}
BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
H1 {font-family: Verdana,Arial,Helvetica}
H2 {font-family: Verdana,Arial,Helvetica}
H3 {font-family: Verdana,Arial,Helvetica}
A:link, A:visited, A:active { text-decoration: underline }
--></style>
<title>FAQ</title>
</head>
<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
<td width="180">
<a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 Logo"></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo"></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo"></a><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo"></a></div>
</td>
<td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center">
<h1>The XML C library for Gnome</h1>
<h2>FAQ</h2>
</td></tr></table></td></tr></table></td>
</tr></table>
<table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr>
<td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td>
<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr>
<tr><td bgcolor="#fffacd"><ul>
<li><a href="index.html">Home</a></li>
<li><a href="intro.html">Introduction</a></li>
<li><a href="FAQ.html">FAQ</a></li>
<li><a href="docs.html">Documentation</a></li>
<li><a href="bugs.html">Reporting bugs and getting help</a></li>
<li><a href="help.html">How to help</a></li>
<li><a href="downloads.html">Downloads</a></li>
<li><a href="news.html">News</a></li>
<li><a href="XMLinfo.html">XML</a></li>
<li><a href="XSLT.html">XSLT</a></li>
<li><a href="python.html">Python and bindings</a></li>
<li><a href="architecture.html">libxml architecture</a></li>
<li><a href="tree.html">The tree output</a></li>
<li><a href="interface.html">The SAX interface</a></li>
<li><a href="xmldtd.html">Validation &amp; DTDs</a></li>
<li><a href="xmlmem.html">Memory Management</a></li>
<li><a href="encoding.html">Encodings support</a></li>
<li><a href="xmlio.html">I/O Interfaces</a></li>
<li><a href="catalog.html">Catalog support</a></li>
<li><a href="library.html">The parser interfaces</a></li>
<li><a href="entities.html">Entities or no entities</a></li>
<li><a href="namespaces.html">Namespaces</a></li>
<li><a href="upgrade.html">Upgrading 1.x code</a></li>
<li><a href="threads.html">Thread safety</a></li>
<li><a href="DOM.html">DOM Principles</a></li>
<li><a href="example.html">A real example</a></li>
<li><a href="contribs.html">Contributions</a></li>
<li><a href="xmlreader.html">The Reader Interface</a></li>
<li><a href="tutorial/index.html">Tutorial</a></li>
<li><a href="guidelines.html">XML Guidelines</a></li>
<li>
<a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a>
</li>
</ul></td></tr>
</table>
<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr>
<tr><td bgcolor="#fffacd">
<form action="search.php" enctype="application/x-www-form-urlencoded" method="GET">
<input name="query" type="TEXT" size="20" value=""><input name="submit" type="submit" value="Search ...">
</form>
<ul>
<li><a href="APIchunk0.html">Alphabetic</a></li>
<li><a href="APIconstructors.html">Constructors</a></li>
<li><a href="APIfunctions.html">Functions/Types</a></li>
<li><a href="APIfiles.html">Modules</a></li>
<li><a href="APIsymbols.html">Symbols</a></li>
</ul>
</td></tr>
</table>
<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr>
<tr><td bgcolor="#fffacd"><ul>
<li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li>
<li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li>
<li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li>
<li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li>
<li><a href="ftp://xmlsoft.org/">FTP</a></li>
<li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li>
<li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
<li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li>
<li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li>
<li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml&amp;product=libxml2">Bug Tracker</a></li>
</ul></td></tr>
</table>
</td></tr></table></td>
<td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd">
<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>libxml 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 libxml 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>Unless you are forced to because your application links with a Gnome
    library requiring it,  <strong><span style="background-color: #FF0000">Do
    Not Use libxml1</span></strong>, use libxml2</li>
  <li>
<em>Where can I get libxml</em> ?
    <p>The original distribution comes from <a href="ftp://rpmfind.net/pub/libxml/">rpmfind.net</a> or <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.4/">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/%20%20%20%20%20%20%20%20%20">http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/</a>
</p>
  </li>
  <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://rpmfind.net/pub/libxml/">rpmfind.net</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 libxml ?</em>
    <p>As most UNIX libraries libxml follows the &quot;standard&quot;:</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 libxml ?</em>
    <p>Libxml 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 libxml 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>
  <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 CVS 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>xmlDocDump() generates output on one line.</em>
    <p>Libxml 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 libxml 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>
  <li>Extra nodes in the document:
    <p><em>For a XML file as below:</em></p>
    <pre>&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;PLAN xmlns=&quot;http://www.argus.ca/autotest/1.0/&quot;&gt;
&lt;NODE CommFlag=&quot;0&quot;/&gt;
&lt;NODE CommFlag=&quot;1&quot;/&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=&quot;0&quot;)</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>XPath implementation looks seriously broken</em>
    <p>XPath implementation prior to 2.3.0 was really incomplete. Upgrade to
    a recent version, there are no known bugs in the current version.</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 privoded on the
    web page?</em>
    <p>Ideally a libxml 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>look for examples of use for libxml function using the Gnome code.
        For example the following will query the full Gnome CVS base for the
        use of the <strong>xmlAddChild()</strong> function:
        <p><a href="http://cvs.gnome.org/lxr/search?string=xmlAddChild">http://cvs.gnome.org/lxr/search?string=xmlAddChild</a></p>
        <p>This may be slow, a large hardware donation to the gnome project
        could cure this :-)</p>
      </li>
      <li>
<a href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&amp;dir=gnome-xml">Browse
        the libxml 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 xmllint.c and of the various testXXX.c test programs should
        provide good examples of how to do things with the library.</li>
    </ul>
</li>
  <li>What about C++ ?
    <p>libxml 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 are however a few C++ wrappers which may fulfill your needs:</p>
    <ul>
<li>by Ari Johnson &lt;ari@btigate.com&gt;:
        <p>Website: <a href="http://lusis.org/~ari/xml%2B%2B/">http://lusis.org/~ari/xml++/</a>
</p>
        <p>Download: <a href="http://lusis.org/~ari/xml%2B%2B/libxml%2B%2B.tar.gz">http://lusis.org/~ari/xml++/libxml++.tar.gz</a>
</p>
      </li>
      <li>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>
    </ul>
</li>
  <li>How to validate a document a posteriori ?
    <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*)&quot;root_name&quot;); /* 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>So what is this funky &quot;xmlChar&quot; used all the time?
    <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>
<p><a href="bugs.html">Daniel Veillard</a></p>
</td></tr></table></td></tr></table></td></tr></table></td>
</tr></table></td></tr></table>
</body>
</html>
