2001-05-01 12:42:26 +00:00
< !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
2000-07-01 11:49:28 +00:00
< html >
< head >
2001-03-13 15:12:39 +00:00
< title > Libxml Frequently Asked Questions< / title >
2001-09-13 14:24:44 +00:00
< meta name = "GENERATOR" content = "amaya V5.0" >
2000-07-01 11:49:28 +00:00
< meta http-equiv = "Content-Type" content = "text/html" >
< / head >
< body bgcolor = "#ffffff" >
2001-03-13 15:12:39 +00:00
< h1 align = "center" > Libxml Frequently Asked Questions< / h1 >
2000-07-01 11:49:28 +00:00
< p > Location: < a
href="http://xmlsoft.org/FAQ.html">http://xmlsoft.org/FAQ.html< / a > < / p >
< p > Libxml home page: < a href = "http://xmlsoft.org/" > http://xmlsoft.org/< / a > < / p >
< p > Mailing-list archive: < a
href="http://xmlsoft.org/messages/">http://xmlsoft.org/messages/< / a > < / p >
2000-07-14 12:10:59 +00:00
< p > Version: $Revision$< / p >
2000-07-01 11:49:28 +00:00
< p > Table of Content:< / p >
< ul >
< li > < a href = "#Licence" > Licence(s)< / a > < / li >
< li > < a href = "#Installati" > Installation< / a > < / li >
< li > < a href = "#Compilatio" > Compilation< / a > < / li >
2001-03-13 15:12:39 +00:00
< li > < a href = "#Developer" > Developer corner< / a > < / li >
2000-07-01 11:49:28 +00:00
< / ul >
< h2 > < a name = "Licence" > Licence< / a > (s)< / h2 >
< ol >
< li > < em > Licensing Terms for libxml< / em >
< p > libxml is released under 2 (compatible) licences:< / p >
< ul >
< li > the < a href = "http://www.gnu.org/copyleft/lgpl.html" > LGPL< / a > : GNU
Library General Public License< / li >
< li > the < a
href="http://www.w3.org/Consortium/Legal/copyright-software-19980720.html">W3C
IPR< / a > : very similar to the XWindow licence< / li >
< / ul >
< / li >
< li > < em > Can I embed libxml in a proprietary application ?< / em >
< p > Yes. The W3C IPR allows you to also keep proprietary the changes you
made to libxml, but it would be graceful to provide back bugfixes and
2001-09-13 14:24:44 +00:00
improvements as patches for possible incorporation in the main
development tree< / p >
2000-07-01 11:49:28 +00:00
< / li >
< / ol >
< h2 > < a name = "Installati" > Installation< / a > < / h2 >
< ol >
2001-03-21 10:28:36 +00:00
< 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 >
2001-09-13 14:24:44 +00:00
< li > < em > Where can I get libxml< / em >
?
2000-07-01 11:49:28 +00:00
< 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/stable/sources/libxml/">gnome.org< / a > < / p >
< p > Most linux and Bsd distribution includes libxml, this is probably the
safer way for end-users< / p >
< p > David Doolin provides precompiled Windows versions at < a
2000-10-16 16:58:19 +00:00
href="http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/ ">http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/< / a > < / p >
2000-07-01 11:49:28 +00:00
< / li >
< li > < em > I see libxml and libxml2 releases, which one should I install ?< / em >
< ul >
2001-09-13 14:24:44 +00:00
< li > If you are not concerned by any existing backward compatibility
with existing application, install libxml2 only< / li >
2000-07-01 11:49:28 +00:00
< 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 >
2001-03-13 15:12:39 +00:00
< li > If you are a developer and your system provides separate packaging
2001-09-13 14:24:44 +00:00
for shared libraries and the development components, it is possible
to install libxml and libxml2, and also < a
2000-07-01 11:49:28 +00:00
href="http://rpmfind.net/linux/RPM/libxml-devel.html">libxml-devel< / a >
2001-03-16 22:04:15 +00:00
and < a
2000-07-01 11:49:28 +00:00
href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml2-devel< / a >
2001-03-16 22:04:15 +00:00
too for libxml2 > = 2.3.0< / li >
2001-03-13 15:12:39 +00:00
< li > If you are developing a new application, please develop against
2000-07-01 11:49:28 +00:00
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. Anyway the
libxml packages provided on < a
href="ftp://rpmfind.net/pub/libxml/">rpmfind.net< / a > provides
libxml.so.0< / p >
< / li >
2001-05-01 12:42:26 +00:00
< li > < em > I can't install the libxml(2) RPM package due to failed
dependancies< / em >
< p > The most generic solution is to refetch 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 (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 >
2000-07-01 11:49:28 +00:00
< / ol >
< h2 > < a name = "Compilatio" > Compilation< / a > < / h2 >
< ol >
< li > < em > What is the process to compile libxml ?< / em >
< p > As most UNIX libraries libxml 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 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 requires any other library, the normal C ANSI API
should be sufficient (please report any violation to this rule you may
find).< / p >
2001-03-13 15:12:39 +00:00
< p > However if found at configuration time libxml will detect and use the
2000-07-01 11:49:28 +00:00
following libs:< / p >
< ul >
2001-09-13 14:24:44 +00:00
< li > < a href = "http://www.info-zip.org/pub/infozip/zlib/" > libz< / a >
: a highly portable and available widely compression library< / li >
2000-07-01 11:49:28 +00:00
< li > iconv: a powerful character encoding conversion library. It's
included by default on recent glibc libraries, so it doesn't need to
be installed specifically on linux. It seems it's now < a
2001-09-13 14:24:44 +00:00
href="http://www.opennc.org/onlinepubs/7908799/xsh/iconv.html">part
of the official UNIX< / a > specification. Here is one < a
2000-10-16 16:58:19 +00:00
href="http://clisp.cons.org/~haible/packages-libiconv.html">implementation
of the library< / a > which source can be found < a
2001-02-10 09:35:37 +00:00
href="ftp://ftp.ilog.fr/pub/Users/haible/gnu/">here< / a > .< / li >
2000-07-01 11:49:28 +00:00
< / ul >
< / li >
< li > < em > libxml does not compile with HP-UX's optional ANSI-C compiler< / em >
< p > this is due to macro limitations. Try to add " -Wp,-H16800 -Ae" to the
CFLAGS< / p >
< p > you can also install and use gcc instead or use a precompiled version
of libxml, both available from the < a
href="http://hpux.cae.wisc.edu/hppd/auto/summary_all.html">HP-UX Porting
and Archive Centre< / a > < / p >
< / li >
< li > < em > make check fails on some platforms< / em >
< p > Sometime the regression tests results don't completely match the value
produced by the parser, and the makefile uses diff to print the delta. On
2001-09-13 14:24:44 +00:00
some platforms the diff return breaks the compilation process, if the
diff is small this is probably not a serious problem< / p >
2000-07-01 11:49:28 +00:00
< / li >
2001-06-11 10:29:38 +00:00
< li > < em > I use the CVS version and there is no configure script< / em >
< p > The configure (and other Makefiles) are generated. Use the autogen.sh
script to regenerate the configure and Makefiles, like:< / p >
< p > < code > ./autogen.sh --prefix=/usr --disable-shared< / code > < / p >
< / li >
2001-06-22 16:03:51 +00:00
< 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 >
2000-07-01 11:49:28 +00:00
< / ol >
2001-03-13 15:12:39 +00:00
< h2 > < a name = "Developer" > Developer< / a > corner< / h2 >
2000-07-01 11:49:28 +00:00
< ol >
2001-09-13 14:24:44 +00:00
< 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
impact other part 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 >
2001-02-10 09:35:37 +00:00
< li > Extra nodes in the document:
2001-02-10 09:40:10 +00:00
< p > < em > For a XML file as below:< / em > < / p >
< pre > < ?xml version="1.0"?>
2001-02-10 09:41:12 +00:00
< PLAN xmlns="http://www.argus.ca/autotest/1.0/">
2001-02-10 09:40:10 +00:00
< NODE CommFlag="0"/>
< NODE CommFlag="1"/>
< /PLAN> < / pre >
2001-03-16 22:04:15 +00:00
< p > < em > after parsing it with the function
pxmlDoc=xmlParseFile(...);< / em > < / p >
2001-02-10 09:35:37 +00:00
< 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 >
2001-02-10 09:40:10 +00:00
< pre > xmlNodePtr pode;
pnode=pxmlDoc-> children-> children;< / pre >
2001-02-10 09:35:37 +00:00
< p > < em > but it does not work. If I change it to< / em > < / p >
2001-02-10 09:40:10 +00:00
< pre > pnode=pxmlDoc-> children-> children-> next;< / pre >
2001-02-10 09:35:37 +00:00
< p > < em > then it works. Can someone explain it to me.< / em > < / p >
< p > < / p >
2001-03-13 15:12:39 +00:00
< p > In XML all characters in the content of the document are significant
2001-02-10 09:35:37 +00:00
< 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 wich 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
2001-09-13 14:24:44 +00:00
use should be limited to case where you are sure there is no
mixed-content in the document.< / p >
2001-02-10 09:35:37 +00:00
< / li >
2000-07-01 11:49:28 +00:00
< li > < em > I get compilation errors of existing code like when accessing
< strong > root< / strong > or < strong > childs fields< / strong > of nodes< / em >
2001-03-13 15:12:39 +00:00
< p > You are compiling code developed for libxml version 1 and using a
libxml2 development environment. Either switch back to libxml v1 devel or
2000-07-01 11:49:28 +00:00
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
2001-09-13 14:24:44 +00:00
and libxml2, but you need to install a more recent version:
libxml(-devel) > = 1.8.8 or libxml2(-devel) > = 2.1.0< / p >
2000-07-01 11:49:28 +00:00
< / li >
< li > < em > XPath implementation looks seriously broken< / em >
2001-09-13 14:24:44 +00:00
< p > XPath implementation prior to 2.3.0 was really incomplete, upgrade to
a recent version, the implementation and debug of libxslt generated fixes
2001-03-16 22:04:15 +00:00
for most obvious problems.< / p >
2000-07-01 11:49:28 +00:00
< / 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
2000-10-16 16:58:19 +00:00
< grin/> ...< / p >
2000-07-01 11:49:28 +00:00
< p > Check the previous points 1/ and 2/ raised before, and send
patches.< / p >
< / li >
< li > < em > Where can I get more examples and informations than in the web
page< / em >
< p > Ideally a libxml book would be nice. I have no such plan ... But you
can:< / p >
< ul >
2000-10-16 16:58:19 +00:00
< li > check more deeply the < a href = "html/libxml-lib.html" > existing
generated doc< / a > < / li >
2000-07-01 11:49:28 +00:00
< li > looks 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
2000-10-16 16:58:19 +00:00
href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome& dir=gnome-xml">Browse
2001-09-13 14:24:44 +00:00
the libxml source< / a >
, I try to write code as clean and documented as possible, so
looking at it may be helpful< / li >
2000-07-01 11:49:28 +00:00
< / ul >
< / li >
< li > What about C++ ?
2001-09-13 14:24:44 +00:00
< 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
2000-07-01 11:49:28 +00:00
C++.< / p >
< p > There is however a C++ wrapper provided by Ari Johnson
2000-10-16 16:58:19 +00:00
< ari@btigate.com> which may fullfill your needs:< / p >
2000-07-01 11:49:28 +00:00
< p > Website: < a
href="http://lusis.org/~ari/xml++/">http://lusis.org/~ari/xml++/< / a > < / p >
< p > Download: < a
href="http://lusis.org/~ari/xml++/libxml++.tar.gz">http://lusis.org/~ari/xml++/libxml++.tar.gz< / a > < / p >
< / 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 who have been built from scratch using
the API. Use the < a
2001-01-29 08:22:21 +00:00
href="http://xmlsoft.org/html/libxml-valid.html#XMLVALIDATEDTD">xmlValidateDtd()< / a >
2000-07-01 11:49:28 +00:00
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 */
2000-10-16 16:58:19 +00:00
dtd-> name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */
2000-07-01 11:49:28 +00:00
2000-10-16 16:58:19 +00:00
doc-> intSubset = dtd;
if (doc-> children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
else xmlAddPrevSibling(doc-> children, (xmlNodePtr)dtd);
2000-07-01 11:49:28 +00:00
< / pre >
< / li >
< li > etc ...< / li >
< / ol >
2001-06-24 12:13:24 +00:00
< p > < a href = "mailto:daniel@veillard.com" > Daniel Veillard< / a > < / p >
2000-07-01 11:49:28 +00:00
< p > $Id$< / p >
< / body >
< / html >