NOTE: 
  - the head of this module is package libxml-2 . There is incompatibilities
    with the old libxml-1 headers. I posted on gnome-hackers a recipe to
    change your code to compile with both, check it out ! Also read
    http://xmlsoft.org/upgrade.html
  - in the meantime the old 1.x code has been tagged with LIB_XML_1_BRANCH
    extract this version and drop me a mail if you want me to take care of
    the update of your module to libxml-2 <daniel@veillard.com>
  - the 1.x branch has a separate commit policy, please check the HACKING
    file for this branch

     Rules for commits on the gnome-xml module
     =========================================

  BEFORE READING FURTHER: DO NOT COMMIT DIRECTLY !

 In the exceptional case where a serious breakage in this module
prevents other core projects from making progress, then feel free
to patch first and send mail afterward as long as the changes are limited.
Please keep in mind that a large part of my user base is on Windows, so
be careful with potential portability problems there.

Otherwise, send me (veillard@redhat.com) a mail and if it's a bug
issue, register it at bugzilla.gnome.org (module libxml). I check both
my mail and the bug database on a regular basis. If you don't get an
answer within a week (which is highly unprobable) then commit your changes.
This simply mean that I'm on holliday or on the road.

  thanks in advance for following the rule,

Daniel

P.S.: Bjorn Reese, William Brack and Thomas Broyer get an exception for
      the send before commit rule as well as John Fleck for the doc maintenance
      Send them mail if I don't answer to request in a timely fashion

