INTRODUCTION
============

This module implements a Perl interface to the Gnome libxml2 library. The
libxml2 libxml2 library provides interfaces for parsing and manipulating XML
Files. This Module allows Perl programmers to make use of the highly capable
validating XML parser and the high performance DOM implementation.


IMPORTANT NOTES
===============

XML::LibXML was almost entirely reimplemented between version 1.40 to version
1.49. This may cause problems on some production machines. With version 1.50 a
lot of compatibility fixes were applied, so programs written for XML::LibXML
1.40 or less should run with version 1.50 again.


DEPENDENCIES
============

Prior to installation you MUST have installed the libxml2 library. You can get
the latest libxml2 version from

http://xmlsoft.org

Without libxml2 installed this module will neither build nor run.

Also XML::LibXML requires the following packages:

   o XML::LibXML::Common - general functions used by various
          XML::LibXML modules
   o XML::SAX - DOM building support from SAX
   o XML::NamespaceSupport - DOM building support from SAX

These packages are required. If one is missing some tests will fail.

Again, libxml2 is required to make XML::LibXML work. The library is not just
requiered to build XML::LibXML, it has to be accessible during runtime as well.
Because of this you need to make sure libxml2 is installed properly. To test
this, run the xmllint program on your system. xmllint is shipped with libxml2
and therefore should be available.


INSTALLATION
============

To install XML::LibXML just follow the standard installation routine for Perl
modules:

   1 perl Makefile.PL
   2 make
   3 make test
   4 make install # as superuser

Note that you have to rebuild XML::LibXML once you upgrade libxml2. This avoids
problems with binary incompatibilities between releases of the library.


Notes On libxml2 Versions
=========================

libxml2 claims binary compatibility between its patch levels. This is not all
true:

First of all XML::LibXML requires at least libxml2 2.4.25. For most OS this
means that an update of the prebuild packages is required, since most
distributors ship ancient libxml2 versions most users will need to upgrade
their installation.

If you already run an older version of XML::LibXML and you wish to upgrade to a
bug fixed version of libxml2. libxml2 2.4.25 and 2.5.x versions are not 100%
binary compatible. So if you intend to upgrade to such a version you will need
to rebuild XML::LibXML (and XML::LibXML::Common) as well.

Users of perl 5.005_03 and perl 5.6.1 with thread support will also like to
avoid libxml2 version 2.4.25 and use later versions instead.

If your libxml2 installation is not within your $PATH. you can set the
environment variable XMLPREFIX=$YOURLIBXMLPREFIX to make XML::LibXML recognize
the correct libxml2 version in use.

e.g.

>  perl Makefile.PL XMLPREFIX=/usr/brand-new 

will ask '/usr/brand-new/bin/xml2-config' about your real libxml2
configuration.

Try to avoid to set INC and LIBS on the commandline. One will skip the
configuration tests in these cases. There will be no report, if the given
installation is known to be broken.


Which Version of libxml2 should be used?
========================================

XML::LibXML is tested against many versions of libxml2 before it is released.
Thus there are versions of libxml2 that are known not to work properly with
XML::LibXML. The Makefile.PL keeps a blacklist of these broken libxml2
versions.

If one has one of these versions it will be notified during installation. One
may find that XML::LibXML builds and tests fine in a particular environment.
But if XML::LibXML is run in such an environment, there will be no support at
all!

The following versions are tested:

   o past 2.4.20: tested; working.
   o 2.4.25: tested; not working
   o past 2.4.25: tested, working
   o past 2.5.0: tested; brocken Attribute handling
   o version 2.5.5: tested; tests pass, but known as broken
   o up to version 2.5.11: tested; working
   o version 2.6.0: tested; not working
   o to version 2.6.2: tested; working
   o version 2.6.3: tested; not working
   o version 2.6.4: tested; not working (XML Schema errors)
   o version 2.6.5: tested; not working (broken XIncludes)
   o up to version 2.6.8: tested; working

It happens, that an older version of libxml2 passes all tests under certain
conditions. This is no reason to assume that version to work on all platforms.
If versions of libxml2 are marked as not working this is done for good reasons.


Notes for Microsoft Windows
===========================

Thanks to Randy Kobes there is a precompiled PPM package available on

http://theoryx5.uwinnipeg.ca/ppmpackages/

Usually it takes a little time to build the package for the latest release.


Notes for Mac OS X
==================

Due refactoring the module, XML::LibXML will not run with Mac OS X anymore. It
appears this is related to special linker options for that OS prior to version
10.2.2. Since I don't have full access to this OS, help/ patches from OS X
gurus are highly apprecheated.

It is confirmed that XML::LibXML builds and runs without problems since Mac OS
X 10.2.6.


Notes for HPUX
==============

XML::LibXML requires libxml2 2.4.25 or later. That means there may not exist a
usable binary libxml2 package for HPUX and XML::LibXML. For some reasons the
HPUX cc will not compile libxml2 correctly, which will force you to recompile
perl with gcc (if you havn't already done that).

Additionally I received the following Note from Rozi Kovesdi:

> Here is my report if someone else runs into the same problem:
> 
> Finally I am done with installing all the libraries and XML Perl
> modules
> 
> The combination that worked best for me was:
> gcc
> GNU make
> 
> Most importantly - before trying to install Perl modules that depend on
> libxml2:
> 
> must set SHLIB_PATH  to include  the path to  libxml2 shared library
>  
> assuming that you used the default:
> 
> export  SHLIB=/usr/local/lib
> 
> also, make sure that the config  files have execute permission:
> 
> /usr/local/bin/xml2-config
> /usr/local/bin/xslt-config
>  
> they did not have +x after they were installed by 'make install'
> and it took me a while to realize that this was my problem
>  
> or one can use:
> 
> perl Makefile.PL LIBS='-L/path/to/lib' INC='-I/path/to/include'


CONTACT
=======

For suggestions etc. you may contact the maintainer directly
christian.glahn@uibk.ac.at

For bug reports, please use the CPAN request tracker on
http://rt.cpan.org/NoAuth/Bugs.html?Dist=XML-LibXML

Also XML::LibXML issues are discussed among other things on the perl XML
mailing list (perl-xml@listserv.ActiveState.com). In case of problems you
should check the archives of that list first. Many problems are already
discussed there. You can find the list's archives at
http://mailarchive.activestate.com/browse/perl-xml/


PACKAGE HISTORY
===============

Version < 0.98 were maintained by Matt Sergeant

0.98 > Version > 1.49 were maintained by Matt Sergeant and Christian Glahn

Versions >= 1.49 are maintained by Christian Glahn

Versions > 1.56 are co-maintained by Petr Pajas


PATCHES AND DEVELOPER VERSION
=============================

As XML::LibXML is open source software help and patches are appreciated. If you
find a bug in the current release, make sure this bug still exists in the
developer version of XML::LibXML. This version can be downloaded from cvs. The
cvs version can be be loaded via

cvs -d:pserver:anonymous@axkit.org:/home/cvs -z3 co XML-LibXML

Note this account does not allow direct commits.

Please consider the tests as correct. If any test fails it is most certainly
related to a bug.

If you find documentation bugs, please fix them in the libxml.dkb file, stored
in the docs directory.


KNOWN ISSUES
============

The push-parser implementation causes memory leaks.