From 35a201cc8ef0c3f5b2df88d2e528aabee1048348 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Fri, 30 Apr 2021 18:47:09 +0200 Subject: Initial/Final commit --- libxml2-2.9.10/doc/FAQ.html | 299 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 libxml2-2.9.10/doc/FAQ.html (limited to 'libxml2-2.9.10/doc/FAQ.html') diff --git a/libxml2-2.9.10/doc/FAQ.html b/libxml2-2.9.10/doc/FAQ.html new file mode 100644 index 0000000..e80cef6 --- /dev/null +++ b/libxml2-2.9.10/doc/FAQ.html @@ -0,0 +1,299 @@ + + +FAQ
Action against software patentsGnome2 LogoW3C LogoRed Hat Logo
Made with Libxml2 Logo

The XML C parser and toolkit of Gnome

FAQ

Main Menu
Related links

Table of Contents:

License(s)

    +
  1. Licensing Terms for libxml +

    libxml2 is released under the MIT + License; see the file Copyright in the distribution for the precise + wording

    +
  2. +
  3. Can I embed libxml2 in a proprietary application ? +

    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.

    +
  4. +

Installation

    +
  1. Do Not Use + libxml1, use libxml2
  2. +

    +
  3. Where can I get libxml ? +

    The original distribution comes from xmlsoft.org or gnome.org

    +

    Most Linux and BSD distributions include libxml, this is probably the + safer way for end-users to use libxml.

    +

    David Doolin provides precompiled Windows versions at http://www.ce.berkeley.edu/~doolin/code/libxmlwin32/

    +
  4. +

    +
  5. I see libxml and libxml2 releases, which one should I install ? +
      +
    • If you are not constrained by backward compatibility issues with + existing applications, install libxml2 only
    • +
    • If you are not doing development, you can safely install both. + Usually the packages libxml and libxml2 are + compatible (this is not the case for development packages).
    • +
    • 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 libxml-devel + and libxml2-devel + too for libxml2 >= 2.3.0
    • +
    • If you are developing a new application, please develop against + libxml2(-devel)
    • +
    +
  6. +
  7. I can't install the libxml package, it conflicts with libxml0 +

    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 xmlsoft.org provide + libxml.so.0

    +
  8. +
  9. I can't install the libxml(2) RPM package due to failed + dependencies +

    The most generic solution is to re-fetch the latest src.rpm , and + rebuild it locally with

    +

    rpm --rebuild libxml(2)-xxx.src.rpm.

    +

    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.

    +
  10. +

Compilation

    +
  1. What is the process to compile libxml2 ? +

    As most UNIX libraries libxml2 follows the "standard":

    +

    gunzip -c xxx.tar.gz | tar xvf -

    +

    cd libxml-xxxx

    +

    ./configure --help

    +

    to see the options, then the compilation/installation proper

    +

    ./configure [possible options]

    +

    make

    +

    make install

    +

    At that point you may have to rerun ldconfig or a similar utility to + update your list of installed shared libs.

    +
  2. +
  3. What other libraries are needed to compile/install libxml2 ? +

    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).

    +

    However if found at configuration time libxml2 will detect and use the + following libs:

    +
      +
    • libz : a + highly portable and available widely compression library.
    • +
    • 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 part + of the official UNIX specification. Here is one implementation of the + library which source can be found here.
    • +
    +
  4. +

    +
  5. Make check fails on some platforms +

    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.

    +

    Sometimes (especially on Solaris) make checks fail due to limitations + in make. Try using GNU-make instead.

    +
  6. +
  7. I use the SVN version and there is no configure script +

    The configure script (and other Makefiles) are generated. Use the + autogen.sh script to regenerate the configure script and Makefiles, + like:

    +

    ./autogen.sh --prefix=/usr --disable-shared

    +
  8. +
  9. I have troubles when running make tests with gcc-3.0 +

    It seems the initial release of gcc-3.0 has a problem with the + optimizer which miscompiles the URI module. Please use another + compiler.

    +
  10. +

Developer corner

    +
  1. Troubles compiling or linking programs using libxml2 +

    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 + xml2-config which is installed as part of libxml2 usual + install process which provides those flags. Use

    +

    xml2-config --cflags

    +

    to get the compilation flags and

    +

    xml2-config --libs

    +

    to get the linker flags. Usually this is done directly from the + Makefile as:

    +

    CFLAGS=`xml2-config --cflags`

    +

    LIBS=`xml2-config --libs`

    +
  2. +
  3. I want to install my own copy of libxml2 in my home directory and + link my programs against it, but it doesn't work +

    There are many different ways to accomplish this. Here is one way to + do this under Linux. Suppose your home directory is /home/user. + Then:

    +
      +
    • Create a subdirectory, let's call it myxml
    • +
    • unpack the libxml2 distribution into that subdirectory
    • +
    • chdir into the unpacked distribution + (/home/user/myxml/libxml2 )
    • +
    • configure the library using the "--prefix" switch, + specifying an installation subdirectory in + /home/user/myxml, e.g. +

      ./configure --prefix /home/user/myxml/xmlinst {other + configuration options}

      +
    • +
    • now run make followed by make install
    • +
    • At this point, the installation subdirectory contains the complete + "private" include files, library files and binary program files (e.g. + xmllint), located in +

      /home/user/myxml/xmlinst/lib, + /home/user/myxml/xmlinst/include and + /home/user/myxml/xmlinst/bin

      + respectively.
    • +
    • 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 +

      export PATH=/home/user/myxml/xmlinst/bin:$PATH

      +
    • +
    • Now suppose you have a program test1.c that you would + like to compile with your "private" library. Simply compile it using + the command +

      gcc `xml2-config --cflags --libs` -o test test.c

      + Note that, because your PATH has been set with + /home/user/myxml/xmlinst/bin at the beginning, the xml2-config + program which you just installed will be used instead of the system + default one, and this will automatically get the correct + libraries linked with your program.
    • +
    +
  4. + +

    +
  5. xmlDocDump() generates output on one line. +

    Libxml2 will not invent spaces in the content of a + document since all spaces in the content of a document are + significant. If you build a tree from the API and want + indentation:

    +
      +
    1. the correct way is to generate those yourself too.
    2. +
    3. the dangerous way is to ask libxml2 to add those blanks to your + content modifying the content of your document in the + process. The result may not be what you expect. There is + NO way to guarantee that such a modification won't + affect other parts of the content of your document. See xmlKeepBlanksDefault + () and xmlSaveFormatFile + ()
    4. +
    +
  6. +

    +
  7. Extra nodes in the document: +

    For an XML file as below:

    +
    <?xml version="1.0"?>
    +<PLAN xmlns="http://www.argus.ca/autotest/1.0/">
    +<NODE CommFlag="0"/>
    +<NODE CommFlag="1"/>
    +</PLAN>
    +

    after parsing it with the function + pxmlDoc=xmlParseFile(...);

    +

    I want to the get the content of the first node (node with the + CommFlag="0")

    +

    so I did it as following;

    +
    xmlNodePtr pnode;
    +pnode=pxmlDoc->children->children;
    +

    but it does not work. If I change it to

    +
    pnode=pxmlDoc->children->children->next;
    +

    then it works. Can someone explain it to me.

    +

    +

    In XML all characters in the content of the document are significant + including blanks and formatting line breaks.

    +

    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 xmlKeepBlanksDefault + () 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.

    +
  8. +
  9. I get compilation errors of existing code like when accessing + root or child fields of nodes. +

    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 following the instructions.

    +
  10. +
  11. I get compilation errors about non existing + xmlRootNode or xmlChildrenNode + fields. +

    The source code you are using has been upgraded to be able to compile with both libxml + and libxml2, but you need to install a more recent version: + libxml(-devel) >= 1.8.8 or libxml2(-devel) >= 2.1.0

    +
  12. +
  13. Random crashes in threaded applications +

    Read and follow all advices on the thread + safety page, and make 100% sure you never call xmlCleanupParser() + while the library or an XML document might still be in use by another + thread.

    +
  14. +
  15. The example provided in the web page does not compile. +

    It's hard to maintain the documentation in sync with the code + <grin/> ...

    +

    Check the previous points 1/ and 2/ raised before, and please send + patches.

    +
  16. +
  17. Where can I get more examples and information than provided on the + web page? +

    Ideally a libxml2 book would be nice. I have no such plan ... But you + can:

    +
      +
    • check more deeply the existing + generated doc
    • +
    • have a look at the set of + examples.
    • +
    • look for examples of use for libxml2 function using the Gnome code + or by asking on Google.
    • +
    • Browse + the libxml2 source , 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.
    • +
    +
  18. +

    +
  19. What about C++ ? +

    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++.

    +

    There is however a C++ wrapper which may fulfill your needs:

    + +
  20. +
  21. How to validate a document a posteriori ? +

    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 xmlValidateDtd() + function. It is also possible to simply add a DTD to an existing + document:

    +
    xmlDocPtr doc; /* your existing document */
    +xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
    +
    +        dtd->name = xmlStrDup((xmlChar*)"root_name"); /* use the given root */
    +
    +        doc->intSubset = dtd;
    +        if (doc->children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
    +        else xmlAddPrevSibling(doc->children, (xmlNodePtr)dtd);
    +          
    +
  22. +
  23. So what is this funky "xmlChar" used all the time? +

    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.

    +
  24. +
  25. etc ...
  26. +

Daniel Veillard

-- cgit v1.2.3