mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 12:23:31 +00:00
remove the libxml2 docs. They are wasting space
svn path=/trunk/; revision=20803
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,117 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- this stylesheet builds the ChangeLog.html -->
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<!-- Import the rest of the site stylesheets -->
|
||||
<xsl:import href="site.xsl"/>
|
||||
|
||||
<!-- Generate XHTML-1.0 transitional -->
|
||||
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
|
||||
|
||||
<xsl:param name="module">libxml2</xsl:param>
|
||||
|
||||
<!-- The table of content for the HTML page -->
|
||||
<xsl:variable name="menu_name">API Menu</xsl:variable>
|
||||
<xsl:variable name="develtoc">
|
||||
<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><!-- style="margin-left: -1em" -->
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}index.html">Main Menu</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}docs.html">Developer Menu</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}html/index.html">Modules Index</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}examples/index.html">Code Examples</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="index.html">API Menu</a></li>
|
||||
<li><a href="html/libxml-parser.html">Parser API</a></li>
|
||||
<li><a href="html/libxml-tree.html">Tree API</a></li>
|
||||
<li><a href="html/libxml-xmlreader.html">Reader API</a></li>
|
||||
<li><a href="{$href_base}guidelines.html">XML Guidelines</a></li>
|
||||
</ul>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:template match="bug">
|
||||
<a href="http://bugzilla.gnome.org/show_bug.cgi?id={@number}">
|
||||
<xsl:value-of select="@number"/></a>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item">
|
||||
<li><xsl:apply-templates/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="entry">
|
||||
|
||||
<p>
|
||||
<b><xsl:value-of select="@who"/></b>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="@date"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="@timezone"/>
|
||||
<ul>
|
||||
<xsl:apply-templates select="item"/>
|
||||
</ul>
|
||||
</p>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="log">
|
||||
<xsl:variable name="title">ChangeLog last entries of <xsl:value-of select="$module"/></xsl:variable>
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="develtoc"/>
|
||||
</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">
|
||||
<xsl:apply-templates select="entry"/>
|
||||
<p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.1 KiB |
File diff suppressed because one or more lines are too long
@@ -1,279 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of 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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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" id="License">License</a>(s)</h3><ol><li><em>Licensing Terms for libxml</em>
|
||||
<p>libxml2 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 libxml2 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" id="Installati">Installation</a></h3><ol><li><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.6/">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/ ">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 >= 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" id="Compilatio">Compilation</a></h3><ol><li><em>What is the process to compile libxml2 ?</em>
|
||||
<p>As most UNIX libraries libxml2 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 a similar utility to
|
||||
update your list of installed shared libs.</p>
|
||||
</li>
|
||||
<li><em>What other libraries are needed to compile/install libxml2 ?</em>
|
||||
<p>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).</p>
|
||||
<p>However if found at configuration time libxml2 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" id="Developer">Developer</a> corner</h3><ol><li><em>Troubles compiling or linking programs using libxml2</em>
|
||||
<p>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
|
||||
<code>xml2-config</code> which is installed as part of libxml2 usual
|
||||
install process which provides those flags. Use</p>
|
||||
<p><code>xml2-config --cflags</code></p>
|
||||
<p>to get the compilation flags and</p>
|
||||
<p><code>xml2-config --libs</code></p>
|
||||
<p>to get the linker flags. Usually this is done directly from the
|
||||
Makefile as:</p>
|
||||
<p><code>CFLAGS=`xml2-config --cflags`</code></p>
|
||||
<p><code>LIBS=`xml2-config --libs`</code></p>
|
||||
</li>
|
||||
<li><em>I want to install my own copy of libxml2 in my home directory and link
|
||||
my programs against it, but it doesn't work</em>
|
||||
<p>There are many different ways to accomplish this. Here is one way to
|
||||
do this under Linux. Suppose your home directory is <code>/home/user.
|
||||
</code>Then:</p>
|
||||
<ul><li>Create a subdirectory, let's call it <code>myxml</code></li>
|
||||
<li>unpack the libxml2 distribution into that subdirectory</li>
|
||||
<li>chdir into the unpacked distribution (<code>/home/user/myxml/libxml2
|
||||
</code>)</li>
|
||||
<li>configure the library using the "<code>--prefix</code>" switch,
|
||||
specifying an installation subdirectory in <code>/home/user/myxml</code>,
|
||||
e.g.
|
||||
<p><code>./configure --prefix /home/user/myxml/xmlinst</code> {other
|
||||
configuration options}</p></li>
|
||||
<li>now run <code>make</code> followed by <code>make install</code></li>
|
||||
<li>At this point, the installation subdirectory contains the complete
|
||||
"private" include files, library files and binary program files (e.g.
|
||||
xmllint), located in
|
||||
<p> <code>/home/user/myxml/xmlinst/lib, /home/user/myxml/xmlinst/include
|
||||
</code> and <code> /home/user/myxml/xmlinst/bin</code></p>
|
||||
respectively.</li>
|
||||
<li>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
|
||||
<p><code>export PATH=/home/user/myxml/xmlinst/bin:$PATH</code></p></li>
|
||||
<li>Now suppose you have a program <code>test1.c</code> that you would
|
||||
like to compile with your "private" library. Simply compile it
|
||||
using the command <p><code>gcc `xml2-config --cflags --libs` -o test
|
||||
test.c</code></p> Note that, because your PATH has been set with <code>
|
||||
/home/user/myxml/xmlinst/bin</code> at the beginning, the
|
||||
xml2-config program which you just installed will be used instead of
|
||||
the system default one, and this will <em>automatically</em> get the
|
||||
correct libraries linked with your program.</li></ul></li><p></p>
|
||||
<li><em>xmlDocDump() generates output on one line.</em>
|
||||
<p>Libxml2 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 libxml2 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><?xml version="1.0"?>
|
||||
<PLAN xmlns="http://www.argus.ca/autotest/1.0/">
|
||||
<NODE CommFlag="0"/>
|
||||
<NODE CommFlag="1"/>
|
||||
</PLAN></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="0")</em></p>
|
||||
<p><em>so I did it as following;</em></p>
|
||||
<pre>xmlNodePtr pnode;
|
||||
pnode=pxmlDoc->children->children;</pre>
|
||||
<p><em>but it does not work. If I change it to</em></p>
|
||||
<pre>pnode=pxmlDoc->children->children->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) >= 1.8.8 or libxml2(-devel) >= 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
|
||||
<grin/> ...</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 provided on the
|
||||
web page?</em>
|
||||
<p>Ideally a libxml2 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>have a look at <a href="examples/index.html">the set of
|
||||
examples</a>.</li>
|
||||
<li>look for examples of use for libxml2 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&dir=gnome-xml">Browse
|
||||
the libxml2 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>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++.</p>
|
||||
<p>There is however a C++ wrapper which may fulfill your needs:</p>
|
||||
<ul><li>by Ari Johnson <[email protected]>:
|
||||
<p>Website: <a href="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</a></p>
|
||||
<p>Download: <a href="http://sourceforge.net/project/showfiles.php?group_id=12999">http://sourceforge.net/project/showfiles.php?group_id=12999</a></p>
|
||||
</li>
|
||||
<!-- Website is currently unavailable as of 2003-08-02
|
||||
<li>by Peter Jones <[email protected]>
|
||||
<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->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);
|
||||
</pre>
|
||||
</li>
|
||||
<li>So what is this funky "xmlChar" 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>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 8.0 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 3.0 KiB |
@@ -1,124 +0,0 @@
|
||||
## Process this file with automake to produce Makefile.in
|
||||
SUBDIRS=examples
|
||||
|
||||
# The top-level SGML file.
|
||||
DOC_MAIN_XML_FILE=gnome-xml.xml
|
||||
|
||||
# The directory containing the source code (if it contains documentation).
|
||||
DOC_SOURCE_DIR=..
|
||||
|
||||
# A file in win32 depends upon one of the doc files
|
||||
WIN32_DIR=$(top_srcdir)/win32
|
||||
|
||||
PAGES= architecture.html bugs.html contribs.html docs.html DOM.html \
|
||||
downloads.html entities.html example.html help.html index.html \
|
||||
interface.html intro.html library.html namespaces.html news.html \
|
||||
tree.html xmldtd.html XMLinfo.html XSLT.html
|
||||
APIPAGES=APIconstructors.html APIfiles.html APIfunctions.html \
|
||||
APIsymbols.html APIchunk0.html
|
||||
EXTRA_DIST=xmlcatalog_man.xml tutorial/*.html tutorial/*.c tutorial/*.pdf \
|
||||
tutorial/images/*.png tutorial/images/callouts/*.png \
|
||||
API*.html *.1 *.xsl *.html *.gif w3c.png html/*.html \
|
||||
html/*.png libxml2-api.xml index.py search.php \
|
||||
apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
|
||||
README.docs
|
||||
|
||||
|
||||
man_MANS = xmllint.1 xmlcatalog.1
|
||||
|
||||
all: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS)
|
||||
|
||||
api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src ../elfgcchack.h
|
||||
|
||||
web: $(PAGES)
|
||||
|
||||
../elfgcchack.h: $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the elfgcchack.h header" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml > elfgcchack.h ; \
|
||||
if [ "`diff -q elfgcchack.h ../elfgcchack.h`" ] ; then \
|
||||
echo "updating ../elfgcchack.h"; \
|
||||
cp elfgcchack.h ../elfgcchack.h; \
|
||||
fi ; rm -f elfgcchack.h ; fi );
|
||||
|
||||
$(PAGES): xml.html site.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML Web pages from xml.html" ; \
|
||||
$(XSLTPROC) --nonet --html $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/xml.html > index.html ; fi );
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the HTML Web pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout $(PAGES) ; fi );
|
||||
|
||||
$(top_builddir)/NEWS: $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html > $(top_builddir)/NEWS ; fi );
|
||||
|
||||
libxml2.xsa: $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the NEWS file" ; \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html > libxml2.xsa ; fi );
|
||||
|
||||
$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/api.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
|
||||
$(XSLTPROC) --nonet --html $(top_srcdir)/doc/api.xsl \
|
||||
$(top_srcdir)/doc/xml.html ; fi );
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the HTML API pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout API*.html ; fi );
|
||||
|
||||
$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML pages from the XML API" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/newapi.xsl libxml2-api.xml ; fi )
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the resulting XHTML pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout html/*.html ; fi );
|
||||
|
||||
wiki: libxml2-api.xml $(srcdir)/wiki.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the wiki HTML pages from the XML API" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/wiki.xsl libxml2-api.xml; fi )
|
||||
|
||||
$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) -o $(WIN32_DIR)/libxml2.def.src \
|
||||
--nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
|
||||
|
||||
libxml2-api.xml libxml2-refs.xml: apibuild.py ../include/libxml/*.h ../*.c
|
||||
-(./apibuild.py)
|
||||
-@(cd .. ; $(MAKE) rebuild_testapi)
|
||||
|
||||
|
||||
xmllint.1: xmllint.xml
|
||||
-@($(XSLTPROC) --nonet xmllint.xml)
|
||||
|
||||
xmlcatalog.1: xmlcatalog_man.xml
|
||||
-@($(XSLTPROC) --nonet xmlcatalog_man.xml)
|
||||
|
||||
clean-local:
|
||||
rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
|
||||
|
||||
maintainer-clean-local: clean-local
|
||||
rm -rf libxml-decl-list.txt libxml-decl.txt
|
||||
|
||||
rebuild: api all
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
-@INSTALL@ -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/index.sgml $(DESTDIR)$(HTML_DIR)/html
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial
|
||||
-@INSTALL@ -m 0644 $(srcdir)/tutorial/*.* \
|
||||
$(DESTDIR)$(HTML_DIR)/tutorial
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images
|
||||
-@INSTALL@ -m 0644 $(srcdir)/tutorial/images/*.* \
|
||||
$(DESTDIR)$(HTML_DIR)/tutorial/images
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
|
||||
-@INSTALL@ -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
|
||||
$(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
|
||||
|
||||
.PHONY : html xml templates scan
|
||||
@@ -1,746 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
subdir = doc
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-exec-recursive install-info-recursive \
|
||||
install-recursive installcheck-recursive installdirs-recursive \
|
||||
pdf-recursive ps-recursive uninstall-info-recursive \
|
||||
uninstall-recursive
|
||||
man1dir = $(mandir)/man1
|
||||
am__installdirs = "$(DESTDIR)$(man1dir)"
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
BASE_THREAD_LIBS = @BASE_THREAD_LIBS@
|
||||
C14N_OBJ = @C14N_OBJ@
|
||||
CATALOG_OBJ = @CATALOG_OBJ@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
CYGWIN_EXTRA_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@
|
||||
CYGWIN_EXTRA_PYTHON_LIBADD = @CYGWIN_EXTRA_PYTHON_LIBADD@
|
||||
DEBUG_OBJ = @DEBUG_OBJ@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DOCB_OBJ = @DOCB_OBJ@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FTP_OBJ = @FTP_OBJ@
|
||||
HAVE_ISINF = @HAVE_ISINF@
|
||||
HAVE_ISNAN = @HAVE_ISNAN@
|
||||
HTML_DIR = @HTML_DIR@
|
||||
HTML_OBJ = @HTML_OBJ@
|
||||
HTTP_OBJ = @HTTP_OBJ@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
|
||||
LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
|
||||
LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
|
||||
LIBXML_VERSION = @LIBXML_VERSION@
|
||||
LIBXML_VERSION_EXTRA = @LIBXML_VERSION_EXTRA@
|
||||
LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
|
||||
LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MODULE_EXTENSION = @MODULE_EXTENSION@
|
||||
MODULE_PLATFORM_LIBS = @MODULE_PLATFORM_LIBS@
|
||||
MV = @MV@
|
||||
M_LIBS = @M_LIBS@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PERL = @PERL@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_INCLUDES = @PYTHON_INCLUDES@
|
||||
PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
|
||||
PYTHON_SUBDIR = @PYTHON_SUBDIR@
|
||||
PYTHON_TESTS = @PYTHON_TESTS@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
RDL_LIBS = @RDL_LIBS@
|
||||
READER_TEST = @READER_TEST@
|
||||
RELDATE = @RELDATE@
|
||||
RM = @RM@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STATIC_BINARIES = @STATIC_BINARIES@
|
||||
STRIP = @STRIP@
|
||||
TAR = @TAR@
|
||||
TEST_C14N = @TEST_C14N@
|
||||
TEST_CATALOG = @TEST_CATALOG@
|
||||
TEST_DEBUG = @TEST_DEBUG@
|
||||
TEST_HTML = @TEST_HTML@
|
||||
TEST_MODULES = @TEST_MODULES@
|
||||
TEST_PATTERN = @TEST_PATTERN@
|
||||
TEST_PHTML = @TEST_PHTML@
|
||||
TEST_PUSH = @TEST_PUSH@
|
||||
TEST_REGEXPS = @TEST_REGEXPS@
|
||||
TEST_SAX = @TEST_SAX@
|
||||
TEST_SCHEMAS = @TEST_SCHEMAS@
|
||||
TEST_THREADS = @TEST_THREADS@
|
||||
TEST_VALID = @TEST_VALID@
|
||||
TEST_VTIME = @TEST_VTIME@
|
||||
TEST_XINCLUDE = @TEST_XINCLUDE@
|
||||
TEST_XPATH = @TEST_XPATH@
|
||||
TEST_XPTR = @TEST_XPTR@
|
||||
THREADS_W32 = @THREADS_W32@
|
||||
THREAD_CFLAGS = @THREAD_CFLAGS@
|
||||
THREAD_LIBS = @THREAD_LIBS@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
|
||||
WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
|
||||
WITH_C14N = @WITH_C14N@
|
||||
WITH_CATALOG = @WITH_CATALOG@
|
||||
WITH_DEBUG = @WITH_DEBUG@
|
||||
WITH_DOCB = @WITH_DOCB@
|
||||
WITH_FTP = @WITH_FTP@
|
||||
WITH_HTML = @WITH_HTML@
|
||||
WITH_HTTP = @WITH_HTTP@
|
||||
WITH_ICONV = @WITH_ICONV@
|
||||
WITH_ISO8859X = @WITH_ISO8859X@
|
||||
WITH_LEGACY = @WITH_LEGACY@
|
||||
WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
|
||||
WITH_MODULES = @WITH_MODULES@
|
||||
WITH_OUTPUT = @WITH_OUTPUT@
|
||||
WITH_PATTERN = @WITH_PATTERN@
|
||||
WITH_PUSH = @WITH_PUSH@
|
||||
WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
|
||||
WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
|
||||
WITH_READER = @WITH_READER@
|
||||
WITH_REGEXPS = @WITH_REGEXPS@
|
||||
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
|
||||
WITH_SAX1 = @WITH_SAX1@
|
||||
WITH_SCHEMAS = @WITH_SCHEMAS@
|
||||
WITH_THREADS = @WITH_THREADS@
|
||||
WITH_TREE = @WITH_TREE@
|
||||
WITH_TRIO = @WITH_TRIO@
|
||||
WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
|
||||
WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
|
||||
WITH_VALID = @WITH_VALID@
|
||||
WITH_WRITER = @WITH_WRITER@
|
||||
WITH_XINCLUDE = @WITH_XINCLUDE@
|
||||
WITH_XPATH = @WITH_XPATH@
|
||||
WITH_XPTR = @WITH_XPTR@
|
||||
XINCLUDE_OBJ = @XINCLUDE_OBJ@
|
||||
XMLLINT = @XMLLINT@
|
||||
XML_CFLAGS = @XML_CFLAGS@
|
||||
XML_INCLUDEDIR = @XML_INCLUDEDIR@
|
||||
XML_LIBDIR = @XML_LIBDIR@
|
||||
XML_LIBS = @XML_LIBS@
|
||||
XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
|
||||
XPATH_OBJ = @XPATH_OBJ@
|
||||
XPTR_OBJ = @XPTR_OBJ@
|
||||
XSLTPROC = @XSLTPROC@
|
||||
Z_CFLAGS = @Z_CFLAGS@
|
||||
Z_LIBS = @Z_LIBS@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_AS = @ac_ct_AS@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
SUBDIRS = examples
|
||||
|
||||
# The top-level SGML file.
|
||||
DOC_MAIN_XML_FILE = gnome-xml.xml
|
||||
|
||||
# The directory containing the source code (if it contains documentation).
|
||||
DOC_SOURCE_DIR = ..
|
||||
|
||||
# A file in win32 depends upon one of the doc files
|
||||
WIN32_DIR = $(top_srcdir)/win32
|
||||
PAGES = architecture.html bugs.html contribs.html docs.html DOM.html \
|
||||
downloads.html entities.html example.html help.html index.html \
|
||||
interface.html intro.html library.html namespaces.html news.html \
|
||||
tree.html xmldtd.html XMLinfo.html XSLT.html
|
||||
|
||||
APIPAGES = APIconstructors.html APIfiles.html APIfunctions.html \
|
||||
APIsymbols.html APIchunk0.html
|
||||
|
||||
EXTRA_DIST = xmlcatalog_man.xml tutorial/*.html tutorial/*.c tutorial/*.pdf \
|
||||
tutorial/images/*.png tutorial/images/callouts/*.png \
|
||||
API*.html *.1 *.xsl *.html *.gif w3c.png html/*.html \
|
||||
html/*.png libxml2-api.xml index.py search.php \
|
||||
apibuild.py libxml2.xsa xmllint.xml xmlcatalog_man.xml \
|
||||
README.docs
|
||||
|
||||
man_MANS = xmllint.1 xmlcatalog.1
|
||||
all: all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
install-man1: $(man1_MANS) $(man_MANS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||
else file=$$i; fi; \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
|
||||
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
|
||||
done
|
||||
uninstall-man1:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
|
||||
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||
for i in $$l2; do \
|
||||
case "$$i" in \
|
||||
*.1*) list="$$list $$i" ;; \
|
||||
esac; \
|
||||
done; \
|
||||
for i in $$list; do \
|
||||
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||
case "$$ext" in \
|
||||
1*) ;; \
|
||||
*) ext='1' ;; \
|
||||
esac; \
|
||||
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
|
||||
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
|
||||
done
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $$MAKEFLAGS; amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(mkdir_p) $(distdir)/html $(distdir)/tutorial $(distdir)/tutorial/images $(distdir)/tutorial/images/callouts
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(mkdir_p) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile $(MANS)
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
for dir in "$(DESTDIR)$(man1dir)"; do \
|
||||
test -z "$$dir" || $(mkdir_p) "$$dir"; \
|
||||
done
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-local mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-libtool \
|
||||
distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-data-local install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man: install-man1
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic \
|
||||
maintainer-clean-local
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
uninstall-man: uninstall-man1
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
|
||||
clean clean-generic clean-libtool clean-local clean-recursive \
|
||||
ctags ctags-recursive distclean distclean-generic \
|
||||
distclean-libtool distclean-recursive distclean-tags distdir \
|
||||
dvi dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-data-local install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man1 install-strip installcheck installcheck-am \
|
||||
installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-local \
|
||||
maintainer-clean-recursive mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
|
||||
tags tags-recursive uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-man uninstall-man1
|
||||
|
||||
|
||||
all: web $(top_builddir)/NEWS libxml2.xsa $(man_MANS)
|
||||
|
||||
api: libxml2-api.xml libxml2-refs.xml $(APIPAGES) $(srcdir)/html/index.html $(WIN32_DIR)/libxml2.def.src ../elfgcchack.h
|
||||
|
||||
web: $(PAGES)
|
||||
|
||||
../elfgcchack.h: $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the elfgcchack.h header" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/elfgcchack.xsl $(srcdir)/libxml2-api.xml > elfgcchack.h ; \
|
||||
if [ "`diff -q elfgcchack.h ../elfgcchack.h`" ] ; then \
|
||||
echo "updating ../elfgcchack.h"; \
|
||||
cp elfgcchack.h ../elfgcchack.h; \
|
||||
fi ; rm -f elfgcchack.h ; fi );
|
||||
|
||||
$(PAGES): xml.html site.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML Web pages from xml.html" ; \
|
||||
$(XSLTPROC) --nonet --html $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/xml.html > index.html ; fi );
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the HTML Web pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout $(PAGES) ; fi );
|
||||
|
||||
$(top_builddir)/NEWS: $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/doc/news.xsl $(top_srcdir)/doc/news.html > $(top_builddir)/NEWS ; fi );
|
||||
|
||||
libxml2.xsa: $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the NEWS file" ; \
|
||||
$(XSLTPROC) --nonet $(top_srcdir)/doc/xsa.xsl $(top_srcdir)/doc/news.html > libxml2.xsa ; fi );
|
||||
|
||||
$(APIPAGES): libxml2-api.xml libxml2-refs.xml $(top_srcdir)/doc/site.xsl $(top_srcdir)/doc/api.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML API pages from libxml2-refs.xml" ; \
|
||||
$(XSLTPROC) --nonet --html $(top_srcdir)/doc/api.xsl \
|
||||
$(top_srcdir)/doc/xml.html ; fi );
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the HTML API pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout API*.html ; fi );
|
||||
|
||||
$(srcdir)/html/index.html: libxml2-api.xml $(srcdir)/newapi.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the HTML pages from the XML API" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/newapi.xsl libxml2-api.xml ; fi )
|
||||
-@(if [ -x $(XMLLINT) ] ; then \
|
||||
echo "Validating the resulting XHTML pages" ; \
|
||||
$(XMLLINT) --nonet --valid --noout html/*.html ; fi );
|
||||
|
||||
wiki: libxml2-api.xml $(srcdir)/wiki.xsl
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
echo "Rebuilding the wiki HTML pages from the XML API" ; \
|
||||
$(XSLTPROC) --nonet $(srcdir)/wiki.xsl libxml2-api.xml; fi )
|
||||
|
||||
$(WIN32_DIR)/libxml2.def.src: libxml2-api.xml
|
||||
-@(if [ -x $(XSLTPROC) ] ; then \
|
||||
$(XSLTPROC) -o $(WIN32_DIR)/libxml2.def.src \
|
||||
--nonet $(WIN32_DIR)/defgen.xsl libxml2-api.xml ; fi )
|
||||
|
||||
libxml2-api.xml libxml2-refs.xml: apibuild.py ../include/libxml/*.h ../*.c
|
||||
-(./apibuild.py)
|
||||
-@(cd .. ; $(MAKE) rebuild_testapi)
|
||||
|
||||
xmllint.1: xmllint.xml
|
||||
-@($(XSLTPROC) --nonet xmllint.xml)
|
||||
|
||||
xmlcatalog.1: xmlcatalog_man.xml
|
||||
-@($(XSLTPROC) --nonet xmlcatalog_man.xml)
|
||||
|
||||
clean-local:
|
||||
rm -f *~ *.bak *.hierarchy *.signals *-unused.txt
|
||||
|
||||
maintainer-clean-local: clean-local
|
||||
rm -rf libxml-decl-list.txt libxml-decl.txt
|
||||
|
||||
rebuild: api all
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
-@INSTALL@ -m 0644 $(srcdir)/xml.html $(srcdir)/encoding.html $(srcdir)/FAQ.html $(srcdir)/structure.gif $(srcdir)/DOM.gif $(srcdir)/smallfootonly.gif $(srcdir)/redhat.gif $(srcdir)/libxml.gif $(srcdir)/w3c.png $(srcdir)/Libxml2-Logo-180x168.gif $(srcdir)/Libxml2-Logo-90x34.gif $(DESTDIR)$(HTML_DIR)
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/*.html $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/*.png $(DESTDIR)$(HTML_DIR)/html
|
||||
-@INSTALL@ -m 0644 $(srcdir)/html/index.sgml $(DESTDIR)$(HTML_DIR)/html
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial
|
||||
-@INSTALL@ -m 0644 $(srcdir)/tutorial/*.* \
|
||||
$(DESTDIR)$(HTML_DIR)/tutorial
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images
|
||||
-@INSTALL@ -m 0644 $(srcdir)/tutorial/images/*.* \
|
||||
$(DESTDIR)$(HTML_DIR)/tutorial/images
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
|
||||
-@INSTALL@ -m 0644 $(srcdir)/tutorial/images/callouts/*.* \
|
||||
$(DESTDIR)$(HTML_DIR)/tutorial/images/callouts
|
||||
|
||||
.PHONY : html xml templates scan
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -1,24 +0,0 @@
|
||||
|
||||
XML toolkit from the GNOME project
|
||||
|
||||
Full documentation is available on-line at
|
||||
http://xmlsoft.org/
|
||||
|
||||
This code is released under the MIT Licence see the Copyright file.
|
||||
|
||||
To report bugs, follow the instructions at:
|
||||
http://xmlsoft.org/bugs.html
|
||||
|
||||
A mailing-list [email protected] is available, to subscribe:
|
||||
http://mail.gnome.org/mailman/listinfo/xml
|
||||
|
||||
The list archive is at:
|
||||
http://mail.gnome.org/archives/xml/
|
||||
|
||||
All technical answers asked privately will be automatically answered on
|
||||
the list and archived for public access unless pricacy is explicitely
|
||||
required and justified.
|
||||
|
||||
Daniel Veillard
|
||||
|
||||
$Id: README.docs,v 1.1 2003/09/01 04:58:15 wbrack Exp $
|
||||
@@ -1,35 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>XML</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>XML</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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><a href="http://www.w3.org/TR/REC-xml">XML is a standard</a> for
|
||||
markup-based structured documents. Here is <a name="example" id="example">an example XML
|
||||
document</a>:</p><pre><?xml version="1.0"?>
|
||||
<EXAMPLE prop1="gnome is great" prop2="&amp; linux too">
|
||||
<head>
|
||||
<title>Welcome to Gnome</title>
|
||||
</head>
|
||||
<chapter>
|
||||
<title>The Linux adventure</title>
|
||||
<p>bla bla bla ...</p>
|
||||
<image href="linus.gif"/>
|
||||
<p>...</p>
|
||||
</chapter>
|
||||
</EXAMPLE></pre><p>The first line specifies that it is an XML document and gives useful
|
||||
information about its encoding. Then the rest of the document is a text
|
||||
format whose structure is specified by tags between brackets. <strong>Each
|
||||
tag opened has to be closed</strong>. XML is pedantic about this. However, if
|
||||
a tag is empty (no content), a single tag can serve as both the opening and
|
||||
closing tag if it ends with <code>/></code> rather than with
|
||||
<code>></code>. Note that, for example, the image tag has no content (just
|
||||
an attribute) and is closed by ending the tag with <code>/></code>.</p><p>XML can be applied successfully to a wide range of tasks, ranging from
|
||||
long term structured document maintenance (where it follows the steps of
|
||||
SGML) to simple data encoding mechanisms like configuration file formatting
|
||||
(glade), spreadsheets (gnumeric), or even shorter lived documents such as
|
||||
WebDAV where it is used to encode remote calls between a client and a
|
||||
server.</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>
|
||||
@@ -1,14 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>XSLT</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>XSLT</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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>Check <a href="http://xmlsoft.org/XSLT">the separate libxslt page</a></p><p><a href="http://www.w3.org/TR/xslt">XSL Transformations</a>, is a
|
||||
language for transforming XML documents into other XML documents (or
|
||||
HTML/textual output).</p><p>A separate library called libxslt is available implementing XSLT-1.0 for
|
||||
libxml2. This module "libxslt" too can be found in the Gnome CVS base.</p><p>You can check the <a href="http://cvs.gnome.org/lxr/source/libxslt/FEATURES">features</a>
|
||||
supported and the progresses on the <a href="http://cvs.gnome.org/lxr/source/libxslt/ChangeLog" name="Changelog" id="Changelog">Changelog</a>.</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>
|
||||
@@ -1,394 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- this stylesheet builds the API*.html , it works based on libxml2-refs.xml
|
||||
-->
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:exsl="http://exslt.org/common"
|
||||
extension-element-prefixes="exsl"
|
||||
exclude-result-prefixes="exsl">
|
||||
|
||||
<!-- Import the rest of the site stylesheets -->
|
||||
<xsl:import href="site.xsl"/>
|
||||
|
||||
<!-- Generate XHTML-1.0 transitional -->
|
||||
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
|
||||
|
||||
<xsl:variable name="href_base" select="''"/>
|
||||
<xsl:variable name="apirefs" select="document('libxml2-refs.xml')"/>
|
||||
<xsl:variable name="module" select="$apirefs/apirefs/@name"/>
|
||||
<xsl:key name="refhref" match="reference" use="@name"/>
|
||||
|
||||
<xsl:template match="ref" mode="anchor">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:for-each select="document('libxml2-refs.xml')">
|
||||
<a href="{key('refhref', $name)/@href}"><xsl:value-of select="$name"/></a><br/>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
<xsl:template match="type" mode="reflist">
|
||||
<h2>Type <xsl:value-of select="@name"/>:</h2>
|
||||
<p>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</p>
|
||||
</xsl:template>
|
||||
<xsl:template match="letter" mode="reflist">
|
||||
<h2>Letter <xsl:value-of select="@name"/>:</h2>
|
||||
<p>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</p>
|
||||
</xsl:template>
|
||||
<xsl:template match="file" mode="reflist">
|
||||
<h2><a name="{@name}">Module <xsl:value-of select="@name"/></a>:</h2>
|
||||
<p>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</p>
|
||||
</xsl:template>
|
||||
<xsl:template match="letter" mode="wordlist">
|
||||
<h2>Letter <xsl:value-of select="@name"/>:</h2>
|
||||
<dl>
|
||||
<xsl:for-each select="word">
|
||||
<dt><xsl:value-of select="@name"/></dt>
|
||||
<dd>
|
||||
<xsl:for-each select="ref">
|
||||
<xsl:apply-templates mode="anchor" select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</dd>
|
||||
</xsl:for-each>
|
||||
</dl>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="constructors">
|
||||
<xsl:message>Generating API Constructors</xsl:message>
|
||||
<xsl:variable name="title">List of constructors for <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIconstructors.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="develtoc"/>
|
||||
</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">
|
||||
<xsl:apply-templates mode="reflist" select="type"/>
|
||||
<p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template match="files">
|
||||
<xsl:message>Generating API List of synbols per file</xsl:message>
|
||||
<xsl:variable name="title">List of Symbols per Module for <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIfiles.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="develtoc"/>
|
||||
</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">
|
||||
<xsl:apply-templates mode="reflist" select="file"/>
|
||||
<p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template match="functions">
|
||||
<xsl:message>Generating API Functions by Type</xsl:message>
|
||||
<xsl:variable name="title">List of function manipulating types in <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIfunctions.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="develtoc"/>
|
||||
</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">
|
||||
<xsl:apply-templates mode="reflist" select="type"/>
|
||||
<p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template match="alpha">
|
||||
<xsl:message>Generating API Alphabetic list</xsl:message>
|
||||
<xsl:variable name="title">Alphabetic List of Symbols in <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="APIsymbols.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="develtoc"/>
|
||||
</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">
|
||||
<xsl:apply-templates mode="reflist" select="letter"/>
|
||||
<p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
<xsl:template name="apichunks">
|
||||
<h2 align="center">
|
||||
<xsl:for-each select="/apirefs/index/chunks/chunk">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="start" select="@start"/>
|
||||
<xsl:variable name="end" select="@end"/>
|
||||
<xsl:variable name="block" select="concat($start, '-', $end)"/>
|
||||
<a href="API{$name}.html"><xsl:value-of select="$block"/></a>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:for-each>
|
||||
</h2>
|
||||
</xsl:template>
|
||||
<xsl:template match="chunk">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="start" select="@start"/>
|
||||
<xsl:variable name="end" select="@end"/>
|
||||
<xsl:variable name="block" select="concat($start, '-', $end)"/>
|
||||
<xsl:variable name="target" select="/apirefs/index/chunk[@name = $name]"/>
|
||||
<xsl:variable name="title">API Alphabetic Index <xsl:value-of select="$block"/> for <xsl:value-of select="$module"/></xsl:variable>
|
||||
<xsl:document href="API{$name}.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="develtoc"/>
|
||||
</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">
|
||||
<xsl:call-template name="apichunks"/>
|
||||
<xsl:apply-templates mode="wordlist"
|
||||
select="$target/letter"/>
|
||||
<xsl:call-template name="apichunks"/>
|
||||
<p><a href="{$href_base}bugs.html">Daniel Veillard</a></p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="index">
|
||||
<xsl:message>Generating API Index</xsl:message>
|
||||
<xsl:apply-templates select="chunks/chunk"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="apirefs">
|
||||
<xsl:message>Generating API Cross References</xsl:message>
|
||||
<xsl:apply-templates select="constructors"/>
|
||||
<xsl:apply-templates select="functions"/>
|
||||
<xsl:apply-templates select="alpha"/>
|
||||
<xsl:apply-templates select="files"/>
|
||||
<xsl:apply-templates select="index"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:apply-templates select="$apirefs/apirefs"/>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1,60 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>Reporting bugs and getting help</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>Reporting bugs and getting help</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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>Well, bugs or missing features are always possible, and I will make a
|
||||
point of fixing them in a timely fashion. The best way to report a bug is to
|
||||
use the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome
|
||||
bug tracking database</a> (make sure to use the "libxml2" module name). I
|
||||
look at reports there regularly and it's good to have a reminder when a bug
|
||||
is still open. Be sure to specify that the bug is for the package libxml2.</p><p>For small problems you can try to get help on IRC, the #xml channel on
|
||||
irc.gnome.org (port 6667) usually have a few person subscribed which may help
|
||||
(but there is no garantee and if a real issue is raised it should go on the
|
||||
mailing-list for archival).</p><p>There is also a mailing-list <a href="mailto:[email protected]">[email protected]</a> for libxml, with an <a href="http://mail.gnome.org/archives/xml/">on-line archive</a> (<a href="http://xmlsoft.org/messages">old</a>). To subscribe to this list,
|
||||
please visit the <a href="http://mail.gnome.org/mailman/listinfo/xml">associated Web</a> page and
|
||||
follow the instructions. <strong>Do not send code, I won't debug it</strong>
|
||||
(but patches are really appreciated!).</p><p>Please note that with the current amount of virus and SPAM, sending mail
|
||||
to the list without being subscribed won't work. There is *far too many
|
||||
bounces* (in the order of a thousand a day !) I cannot approve them manually
|
||||
anymore. If your mail to the list bounced waiting for administrator approval,
|
||||
it is LOST ! Repost it and fix the problem triggering the error.</p><p>Check the following <strong><span style="color: #FF0000">before
|
||||
posting</span></strong>:</p><ul><li>Read the <a href="FAQ.html">FAQ</a> and <a href="search.php">use the
|
||||
search engine</a> to get information related to your problem.</li>
|
||||
<li>Make sure you are <a href="ftp://xmlsoft.org/">using a recent
|
||||
version</a>, and that the problem still shows up in a recent version.</li>
|
||||
<li>Check the <a href="http://mail.gnome.org/archives/xml/">list
|
||||
archives</a> to see if the problem was reported already. In this case
|
||||
there is probably a fix available, similarly check the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">registered
|
||||
open bugs</a>.</li>
|
||||
<li>Make sure you can reproduce the bug with xmllint or one of the test
|
||||
programs found in source in the distribution.</li>
|
||||
<li>Please send the command showing the error as well as the input (as an
|
||||
attachment)</li>
|
||||
</ul><p>Then send the bug with associated information to reproduce it to the <a href="mailto:[email protected]">[email protected]</a> list; if it's really libxml
|
||||
related I will approve it. Please do not send mail to me directly, it makes
|
||||
things really hard to track and in some cases I am not the best person to
|
||||
answer a given question, ask on the list.</p><p>To <span style="color: #E50000">be really clear about support</span>:</p><ul><li>Support or help <span style="color: #E50000">requests MUST be sent to
|
||||
the list or on bugzilla</span> in case of problems, so that the Question
|
||||
and Answers can be shared publicly. Failing to do so carries the implicit
|
||||
message "I want free support but I don't want to share the benefits with
|
||||
others" and is not welcome. I will automatically Carbon-Copy the
|
||||
[email protected] mailing list for any technical reply made about libxml2 or
|
||||
libxslt.</li>
|
||||
<li>There is <span style="color: #E50000">no garantee of support</span>, if
|
||||
your question remains unanswered after a week, repost it, making sure you
|
||||
gave all the detail needed and the information requested.</li>
|
||||
<li>Failing to provide information as requested or double checking first
|
||||
for prior feedback also carries the implicit message "the time of the
|
||||
library maintainers is less valuable than my time" and might not be
|
||||
welcome.</li>
|
||||
</ul><p>Of course, bugs reported with a suggested patch for fixing them will
|
||||
probably be processed faster than those without.</p><p>If you're looking for help, a quick look at <a href="http://mail.gnome.org/archives/xml/">the list archive</a> may actually
|
||||
provide the answer. I usually send source samples when answering libxml2
|
||||
usage questions. The <a href="http://xmlsoft.org/html/book1.html">auto-generated documentation</a> is
|
||||
not as polished as I would like (i need to learn more about DocBook), but
|
||||
it's a good starting point.</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>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 6.0 KiB |
@@ -1,256 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>Catalog support</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>Catalog support</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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 Content:</p><ol><li><a href="General2">General overview</a></li>
|
||||
<li><a href="#definition">The definition</a></li>
|
||||
<li><a href="#Simple">Using catalogs</a></li>
|
||||
<li><a href="#Some">Some examples</a></li>
|
||||
<li><a href="#reference">How to tune catalog usage</a></li>
|
||||
<li><a href="#validate">How to debug catalog processing</a></li>
|
||||
<li><a href="#Declaring">How to create and maintain catalogs</a></li>
|
||||
<li><a href="#implemento">The implementor corner quick review of the
|
||||
API</a></li>
|
||||
<li><a href="#Other">Other resources</a></li>
|
||||
</ol><h3><a name="General2" id="General2">General overview</a></h3><p>What is a catalog? Basically it's a lookup mechanism used when an entity
|
||||
(a file or a remote resource) references another entity. The catalog lookup
|
||||
is inserted between the moment the reference is recognized by the software
|
||||
(XML parser, stylesheet processing, or even images referenced for inclusion
|
||||
in a rendering) and the time where loading that resource is actually
|
||||
started.</p><p>It is basically used for 3 things:</p><ul><li>mapping from "logical" names, the public identifiers and a more
|
||||
concrete name usable for download (and URI). For example it can associate
|
||||
the logical name
|
||||
<p>"-//OASIS//DTD DocBook XML V4.1.2//EN"</p>
|
||||
<p>of the DocBook 4.1.2 XML DTD with the actual URL where it can be
|
||||
downloaded</p>
|
||||
<p>http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd</p>
|
||||
</li>
|
||||
<li>remapping from a given URL to another one, like an HTTP indirection
|
||||
saying that
|
||||
<p>"http://www.oasis-open.org/committes/tr.xsl"</p>
|
||||
<p>should really be looked at</p>
|
||||
<p>"http://www.oasis-open.org/committes/entity/stylesheets/base/tr.xsl"</p>
|
||||
</li>
|
||||
<li>providing a local cache mechanism allowing to load the entities
|
||||
associated to public identifiers or remote resources, this is a really
|
||||
important feature for any significant deployment of XML or SGML since it
|
||||
allows to avoid the aleas and delays associated to fetching remote
|
||||
resources.</li>
|
||||
</ul><h3><a name="definition" id="definition">The definitions</a></h3><p>Libxml, as of 2.4.3 implements 2 kind of catalogs:</p><ul><li>the older SGML catalogs, the official spec is SGML Open Technical
|
||||
Resolution TR9401:1997, but is better understood by reading <a href="http://www.jclark.com/sp/catalog.htm">the SP Catalog page</a> from
|
||||
James Clark. This is relatively old and not the preferred mode of
|
||||
operation of libxml.</li>
|
||||
<li><a href="http://www.oasis-open.org/committees/entity/spec.html">XML
|
||||
Catalogs</a> is far more flexible, more recent, uses an XML syntax and
|
||||
should scale quite better. This is the default option of libxml.</li>
|
||||
</ul><p></p><h3><a name="Simple" id="Simple">Using catalog</a></h3><p>In a normal environment libxml2 will by default check the presence of a
|
||||
catalog in /etc/xml/catalog, and assuming it has been correctly populated,
|
||||
the processing is completely transparent to the document user. To take a
|
||||
concrete example, suppose you are authoring a DocBook document, this one
|
||||
starts with the following DOCTYPE definition:</p><pre><?xml version='1.0'?>
|
||||
<!DOCTYPE book PUBLIC "-//Norman Walsh//DTD DocBk XML V3.1.4//EN"
|
||||
"http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd"></pre><p>When validating the document with libxml, the catalog will be
|
||||
automatically consulted to lookup the public identifier "-//Norman Walsh//DTD
|
||||
DocBk XML V3.1.4//EN" and the system identifier
|
||||
"http://nwalsh.com/docbook/xml/3.1.4/db3xml.dtd", and if these entities have
|
||||
been installed on your system and the catalogs actually point to them, libxml
|
||||
will fetch them from the local disk.</p><p style="font-size: 10pt"><strong>Note</strong>: Really don't use this
|
||||
DOCTYPE example it's a really old version, but is fine as an example.</p><p>Libxml2 will check the catalog each time that it is requested to load an
|
||||
entity, this includes DTD, external parsed entities, stylesheets, etc ... If
|
||||
your system is correctly configured all the authoring phase and processing
|
||||
should use only local files, even if your document stays portable because it
|
||||
uses the canonical public and system ID, referencing the remote document.</p><h3><a name="Some" id="Some">Some examples:</a></h3><p>Here is a couple of fragments from XML Catalogs used in libxml2 early
|
||||
regression tests in <code>test/catalogs</code> :</p><pre><?xml version="1.0"?>
|
||||
<!DOCTYPE catalog PUBLIC
|
||||
"-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
|
||||
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
|
||||
<public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/>
|
||||
...</pre><p>This is the beginning of a catalog for DocBook 4.1.2, XML Catalogs are
|
||||
written in XML, there is a specific namespace for catalog elements
|
||||
"urn:oasis:names:tc:entity:xmlns:xml:catalog". The first entry in this
|
||||
catalog is a <code>public</code> mapping it allows to associate a Public
|
||||
Identifier with an URI.</p><pre>...
|
||||
<rewriteSystem systemIdStartString="http://www.oasis-open.org/docbook/"
|
||||
rewritePrefix="file:///usr/share/xml/docbook/"/>
|
||||
...</pre><p>A <code>rewriteSystem</code> is a very powerful instruction, it says that
|
||||
any URI starting with a given prefix should be looked at another URI
|
||||
constructed by replacing the prefix with an new one. In effect this acts like
|
||||
a cache system for a full area of the Web. In practice it is extremely useful
|
||||
with a file prefix if you have installed a copy of those resources on your
|
||||
local system.</p><pre>...
|
||||
<delegatePublic publicIdStartString="-//OASIS//DTD XML Catalog //"
|
||||
catalog="file:///usr/share/xml/docbook.xml"/>
|
||||
<delegatePublic publicIdStartString="-//OASIS//ENTITIES DocBook XML"
|
||||
catalog="file:///usr/share/xml/docbook.xml"/>
|
||||
<delegatePublic publicIdStartString="-//OASIS//DTD DocBook XML"
|
||||
catalog="file:///usr/share/xml/docbook.xml"/>
|
||||
<delegateSystem systemIdStartString="http://www.oasis-open.org/docbook/"
|
||||
catalog="file:///usr/share/xml/docbook.xml"/>
|
||||
<delegateURI uriStartString="http://www.oasis-open.org/docbook/"
|
||||
catalog="file:///usr/share/xml/docbook.xml"/>
|
||||
...</pre><p>Delegation is the core features which allows to build a tree of catalogs,
|
||||
easier to maintain than a single catalog, based on Public Identifier, System
|
||||
Identifier or URI prefixes it instructs the catalog software to look up
|
||||
entries in another resource. This feature allow to build hierarchies of
|
||||
catalogs, the set of entries presented should be sufficient to redirect the
|
||||
resolution of all DocBook references to the specific catalog in
|
||||
<code>/usr/share/xml/docbook.xml</code> this one in turn could delegate all
|
||||
references for DocBook 4.2.1 to a specific catalog installed at the same time
|
||||
as the DocBook resources on the local machine.</p><h3><a name="reference" id="reference">How to tune catalog usage:</a></h3><p>The user can change the default catalog behaviour by redirecting queries
|
||||
to its own set of catalogs, this can be done by setting the
|
||||
<code>XML_CATALOG_FILES</code> environment variable to a list of catalogs, an
|
||||
empty one should deactivate loading the default <code>/etc/xml/catalog</code>
|
||||
default catalog</p><h3><a name="validate" id="validate">How to debug catalog processing:</a></h3><p>Setting up the <code>XML_DEBUG_CATALOG</code> environment variable will
|
||||
make libxml2 output debugging informations for each catalog operations, for
|
||||
example:</p><pre>orchis:~/XML -> xmllint --memory --noout test/ent2
|
||||
warning: failed to load external entity "title.xml"
|
||||
orchis:~/XML -> export XML_DEBUG_CATALOG=
|
||||
orchis:~/XML -> xmllint --memory --noout test/ent2
|
||||
Failed to parse catalog /etc/xml/catalog
|
||||
Failed to parse catalog /etc/xml/catalog
|
||||
warning: failed to load external entity "title.xml"
|
||||
Catalogs cleanup
|
||||
orchis:~/XML -> </pre><p>The test/ent2 references an entity, running the parser from memory makes
|
||||
the base URI unavailable and the the "title.xml" entity cannot be loaded.
|
||||
Setting up the debug environment variable allows to detect that an attempt is
|
||||
made to load the <code>/etc/xml/catalog</code> but since it's not present the
|
||||
resolution fails.</p><p>But the most advanced way to debug XML catalog processing is to use the
|
||||
<strong>xmlcatalog</strong> command shipped with libxml2, it allows to load
|
||||
catalogs and make resolution queries to see what is going on. This is also
|
||||
used for the regression tests:</p><pre>orchis:~/XML -> ./xmlcatalog test/catalogs/docbook.xml \
|
||||
"-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
|
||||
orchis:~/XML -> </pre><p>For debugging what is going on, adding one -v flags increase the verbosity
|
||||
level to indicate the processing done (adding a second flag also indicate
|
||||
what elements are recognized at parsing):</p><pre>orchis:~/XML -> ./xmlcatalog -v test/catalogs/docbook.xml \
|
||||
"-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
Parsing catalog test/catalogs/docbook.xml's content
|
||||
Found public match -//OASIS//DTD DocBook XML V4.1.2//EN
|
||||
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
|
||||
Catalogs cleanup
|
||||
orchis:~/XML -> </pre><p>A shell interface is also available to debug and process multiple queries
|
||||
(and for regression tests):</p><pre>orchis:~/XML -> ./xmlcatalog -shell test/catalogs/docbook.xml \
|
||||
"-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
> help
|
||||
Commands available:
|
||||
public PublicID: make a PUBLIC identifier lookup
|
||||
system SystemID: make a SYSTEM identifier lookup
|
||||
resolve PublicID SystemID: do a full resolver lookup
|
||||
add 'type' 'orig' 'replace' : add an entry
|
||||
del 'values' : remove values
|
||||
dump: print the current catalog state
|
||||
debug: increase the verbosity level
|
||||
quiet: decrease the verbosity level
|
||||
exit: quit the shell
|
||||
> public "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd
|
||||
> quit
|
||||
orchis:~/XML -> </pre><p>This should be sufficient for most debugging purpose, this was actually
|
||||
used heavily to debug the XML Catalog implementation itself.</p><h3><a name="Declaring" id="Declaring">How to create and maintain</a> catalogs:</h3><p>Basically XML Catalogs are XML files, you can either use XML tools to
|
||||
manage them or use <strong>xmlcatalog</strong> for this. The basic step is
|
||||
to create a catalog the -create option provide this facility:</p><pre>orchis:~/XML -> ./xmlcatalog --create tst.xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
|
||||
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/>
|
||||
orchis:~/XML -> </pre><p>By default xmlcatalog does not overwrite the original catalog and save the
|
||||
result on the standard output, this can be overridden using the -noout
|
||||
option. The <code>-add</code> command allows to add entries in the
|
||||
catalog:</p><pre>orchis:~/XML -> ./xmlcatalog --noout --create --add "public" \
|
||||
"-//OASIS//DTD DocBook XML V4.1.2//EN" \
|
||||
http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd tst.xml
|
||||
orchis:~/XML -> cat tst.xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN" \
|
||||
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
|
||||
<public publicId="-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
uri="http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"/>
|
||||
</catalog>
|
||||
orchis:~/XML -> </pre><p>The <code>-add</code> option will always take 3 parameters even if some of
|
||||
the XML Catalog constructs (like nextCatalog) will have only a single
|
||||
argument, just pass a third empty string, it will be ignored.</p><p>Similarly the <code>-del</code> option remove matching entries from the
|
||||
catalog:</p><pre>orchis:~/XML -> ./xmlcatalog --del \
|
||||
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" tst.xml
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
|
||||
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog"/>
|
||||
orchis:~/XML -> </pre><p>The catalog is now empty. Note that the matching of <code>-del</code> is
|
||||
exact and would have worked in a similar fashion with the Public ID
|
||||
string.</p><p>This is rudimentary but should be sufficient to manage a not too complex
|
||||
catalog tree of resources.</p><h3><a name="implemento" id="implemento">The implementor corner quick review of the
|
||||
API:</a></h3><p>First, and like for every other module of libxml, there is an
|
||||
automatically generated <a href="html/libxml-catalog.html">API page for
|
||||
catalog support</a>.</p><p>The header for the catalog interfaces should be included as:</p><pre>#include <libxml/catalog.h></pre><p>The API is voluntarily kept very simple. First it is not obvious that
|
||||
applications really need access to it since it is the default behaviour of
|
||||
libxml2 (Note: it is possible to completely override libxml2 default catalog
|
||||
by using <a href="html/libxml-parser.html">xmlSetExternalEntityLoader</a> to
|
||||
plug an application specific resolver).</p><p>Basically libxml2 support 2 catalog lists:</p><ul><li>the default one, global shared by all the application</li>
|
||||
<li>a per-document catalog, this one is built if the document uses the
|
||||
<code>oasis-xml-catalog</code> PIs to specify its own catalog list, it is
|
||||
associated to the parser context and destroyed when the parsing context
|
||||
is destroyed.</li>
|
||||
</ul><p>the document one will be used first if it exists.</p><h4>Initialization routines:</h4><p>xmlInitializeCatalog(), xmlLoadCatalog() and xmlLoadCatalogs() should be
|
||||
used at startup to initialize the catalog, if the catalog should be
|
||||
initialized with specific values xmlLoadCatalog() or xmlLoadCatalogs()
|
||||
should be called before xmlInitializeCatalog() which would otherwise do a
|
||||
default initialization first.</p><p>The xmlCatalogAddLocal() call is used by the parser to grow the document
|
||||
own catalog list if needed.</p><h4>Preferences setup:</h4><p>The XML Catalog spec requires the possibility to select default
|
||||
preferences between public and system delegation,
|
||||
xmlCatalogSetDefaultPrefer() allows this, xmlCatalogSetDefaults() and
|
||||
xmlCatalogGetDefaults() allow to control if XML Catalogs resolution should
|
||||
be forbidden, allowed for global catalog, for document catalog or both, the
|
||||
default is to allow both.</p><p>And of course xmlCatalogSetDebug() allows to generate debug messages
|
||||
(through the xmlGenericError() mechanism).</p><h4>Querying routines:</h4><p>xmlCatalogResolve(), xmlCatalogResolveSystem(), xmlCatalogResolvePublic()
|
||||
and xmlCatalogResolveURI() are relatively explicit if you read the XML
|
||||
Catalog specification they correspond to section 7 algorithms, they should
|
||||
also work if you have loaded an SGML catalog with a simplified semantic.</p><p>xmlCatalogLocalResolve() and xmlCatalogLocalResolveURI() are the same but
|
||||
operate on the document catalog list</p><h4>Cleanup and Miscellaneous:</h4><p>xmlCatalogCleanup() free-up the global catalog, xmlCatalogFreeLocal() is
|
||||
the per-document equivalent.</p><p>xmlCatalogAdd() and xmlCatalogRemove() are used to dynamically modify the
|
||||
first catalog in the global list, and xmlCatalogDump() allows to dump a
|
||||
catalog state, those routines are primarily designed for xmlcatalog, I'm not
|
||||
sure that exposing more complex interfaces (like navigation ones) would be
|
||||
really useful.</p><p>The xmlParseCatalogFile() is a function used to load XML Catalog files,
|
||||
it's similar as xmlParseFile() except it bypass all catalog lookups, it's
|
||||
provided because this functionality may be useful for client tools.</p><h4>threaded environments:</h4><p>Since the catalog tree is built progressively, some care has been taken to
|
||||
try to avoid troubles in multithreaded environments. The code is now thread
|
||||
safe assuming that the libxml2 library has been compiled with threads
|
||||
support.</p><p></p><h3><a name="Other" id="Other">Other resources</a></h3><p>The XML Catalog specification is relatively recent so there isn't much
|
||||
literature to point at:</p><ul><li>You can find a good rant from Norm Walsh about <a href="http://www.arbortext.com/Think_Tank/XML_Resources/Issue_Three/issue_three.html">the
|
||||
need for catalogs</a>, it provides a lot of context informations even if
|
||||
I don't agree with everything presented. Norm also wrote a more recent
|
||||
article <a href="http://wwws.sun.com/software/xml/developers/resolver/article/">XML
|
||||
entities and URI resolvers</a> describing them.</li>
|
||||
<li>An <a href="http://home.ccil.org/~cowan/XML/XCatalog.html">old XML
|
||||
catalog proposal</a> from John Cowan</li>
|
||||
<li>The <a href="http://www.rddl.org/">Resource Directory Description
|
||||
Language</a> (RDDL) another catalog system but more oriented toward
|
||||
providing metadata for XML namespaces.</li>
|
||||
<li>the page from the OASIS Technical <a href="http://www.oasis-open.org/committees/entity/">Committee on Entity
|
||||
Resolution</a> who maintains XML Catalog, you will find pointers to the
|
||||
specification update, some background and pointers to others tools
|
||||
providing XML Catalog support</li>
|
||||
<li>There is a <a href="buildDocBookCatalog">shell script</a> to generate
|
||||
XML Catalogs for DocBook 4.1.2 . If it can write to the /etc/xml/
|
||||
directory, it will set-up /etc/xml/catalog and /etc/xml/docbook based on
|
||||
the resources found on the system. Otherwise it will just create
|
||||
~/xmlcatalog and ~/dbkxmlcatalog and doing:
|
||||
<p><code>export XML_CATALOG_FILES=$HOME/xmlcatalog</code></p>
|
||||
<p>should allow to process DocBook documentations without requiring
|
||||
network accesses for the DTD or stylesheets</p>
|
||||
</li>
|
||||
<li>I have uploaded <a href="ftp://xmlsoft.org/test/dbk412catalog.tar.gz">a
|
||||
small tarball</a> containing XML Catalogs for DocBook 4.1.2 which seems
|
||||
to work fine for me too</li>
|
||||
<li>The <a href="http://www.xmlsoft.org/xmlcatalog_man.html">xmlcatalog
|
||||
manual page</a></li>
|
||||
</ul><p>If you have suggestions for corrections or additions, simply contact
|
||||
me:</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>
|
||||
@@ -1,40 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>Contributions</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>Contributions</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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"><ul><li>Bjorn Reese, William Brack and Thomas Broyer have provided a number of
|
||||
patches, Gary Pennington worked on the validation API, threading support
|
||||
and Solaris port.</li>
|
||||
<li>John Fleck helps maintaining the documentation and man pages.</li>
|
||||
<li><a href="mailto:[email protected]">Igor Zlatkovic</a> is now the
|
||||
maintainer of the Windows port, <a href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
|
||||
binaries</a></li>
|
||||
<li><a href="mailto:[email protected]">Gary Pennington</a> provides
|
||||
<a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
|
||||
<li><a href="http://mail.gnome.org/archives/xml/2001-March/msg00014.html">Matt
|
||||
Sergeant</a> developed <a href="http://axkit.org/download/">XML::LibXSLT</a>, a Perl wrapper for
|
||||
libxml2/libxslt as part of the <a href="http://axkit.com/">AxKit XML
|
||||
application server</a></li>
|
||||
<li><a href="mailto:[email protected]">Felix Natter</a> and <a href="mailto:[email protected]">Geert Kloosterman</a> provide <a href="libxml-doc.el">an emacs module</a> to lookup libxml(2) functions
|
||||
documentation</li>
|
||||
<li><a href="mailto:[email protected]">Ziying Sherwin</a> provided <a href="http://xmlsoft.org/messages/0488.html">man pages</a></li>
|
||||
<li>there is a module for <a href="http://acs-misc.sourceforge.net/nsxml.html">libxml/libxslt support
|
||||
in OpenNSD/AOLServer</a></li>
|
||||
<li><a href="mailto:[email protected]">Dave Kuhlman</a> provided the
|
||||
first version of libxml/libxslt <a href="http://www.rexx.com/~dkuhlman">wrappers for Python</a></li>
|
||||
<li>Petr Kozelka provides <a href="http://sourceforge.net/projects/libxml2-pas">Pascal units to glue
|
||||
libxml2</a> with Kylix and Delphi and other Pascal compilers</li>
|
||||
<li><a href="mailto:[email protected]">Aleksey Sanin</a> implemented the
|
||||
<a href="http://www.w3.org/Signature/">XML Canonicalization and XML
|
||||
Digital Signature</a> <a href="http://www.aleksey.com/xmlsec/">implementations for libxml2</a></li>
|
||||
<li><a href="mailto:[email protected]">Steve Ball</a>
|
||||
and contributors maintain <a href="http://tclxml.sourceforge.net/">tcl bindings for libxml2 and
|
||||
libxslt</a>, as well as <a href="http://tclxml.sf.net/tkxmllint.html">tkxmllint</a> a GUI for
|
||||
xmllint and <a href="http://tclxml.sf.net/tkxsltproc.html">tkxsltproc</a>
|
||||
a GUI for xsltproc.</li>
|
||||
</ul><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>
|
||||
File diff suppressed because one or more lines are too long
@@ -1,34 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>Downloads</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>Downloads</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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>The latest versions of libxml2 can be found on the <a href="ftp://xmlsoft.org/">xmlsoft.org</a> server ( <a href="http://xmlsoft.org/sources/">HTTP</a>, <a href="ftp://xmlsoft.org/">FTP</a> and rsync are available), there is also
|
||||
mirrors (<a href="ftp://ftp.planetmirror.com/pub/xmlsoft/">Australia</a>( <a href="http://xmlsoft.planetmirror.com/">Web</a>), <a href="ftp://fr.rpmfind.net/pub/libxml/">France</a>) or on the <a href="ftp://ftp.gnome.org/pub/GNOME/MIRRORS.html">Gnome FTP server</a> as <a href="ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/">source archive</a>
|
||||
, Antonin Sprinzl also provide <a href="ftp://gd.tuwien.ac.at/pub/libxml/">a
|
||||
mirror in Austria</a>. (NOTE that you need both the <a href="http://rpmfind.net/linux/RPM/libxml2.html">libxml(2)</a> and <a href="http://rpmfind.net/linux/RPM/libxml2-devel.html">libxml(2)-devel</a>
|
||||
packages installed to compile applications using libxml.)</p><p>You can find all the history of libxml(2) and libxslt releases in the <a href="http://xmlsoft.org/sources/old/">old</a> directory. The precompiled
|
||||
Windows binaries made by Igor Zlatovic are available in the <a href="http://xmlsoft.org/sources/win32/">win32</a> directory.</p><p>Binary ports:</p><ul><li>Red Hat RPMs for i386 are available directly on <a href="ftp://xmlsoft.org/">xmlsoft.org</a>, the source RPM will compile on
|
||||
any architecture supported by Red Hat.</li>
|
||||
<li><a href="mailto:[email protected]">Igor Zlatkovic</a> is now the
|
||||
maintainer of the Windows port, <a href="http://www.zlatkovic.com/projects/libxml/index.html">he provides
|
||||
binaries</a>.</li>
|
||||
<li>Blastwave provides
|
||||
<a href="http://www.blastwave.org/packages.php/libxml2">Solaris binaries</a>.</li>
|
||||
<li><a href="mailto:[email protected]">Steve Ball</a> provides <a href="http://www.explain.com.au/oss/libxml2xslt.html">Mac Os X
|
||||
binaries</a>.</li>
|
||||
<li>The HP-UX porting center provides <a href="http://hpux.connect.org.uk/hppd/hpux/Gnome/">HP-UX binaries</a></li>
|
||||
</ul><p>If you know other supported binary ports, please <a href="http://veillard.com/">contact me</a>.</p><p><a name="Snapshot" id="Snapshot">Snapshot:</a></p><ul><li>Code from the W3C cvs base libxml2 module, updated hourly <a href="ftp://xmlsoft.org/libxml2-cvs-snapshot.tar.gz">libxml2-cvs-snapshot.tar.gz</a>.</li>
|
||||
<li>Docs, content of the web site, the list archive included <a href="ftp://xmlsoft.org/libxml-docs.tar.gz">libxml-docs.tar.gz</a>.</li>
|
||||
</ul><p><a name="Contribs" id="Contribs">Contributions:</a></p><p>I do accept external contributions, especially if compiling on another
|
||||
platform, get in touch with the list to upload the package, wrappers for
|
||||
various languages have been provided, and can be found in the <a href="python.html">bindings section</a></p><p>Libxml2 is also available from CVS:</p><ul><li><p>The <a href="http://cvs.gnome.org/viewcvs/libxml2/">Gnome CVS
|
||||
base</a>. Check the <a href="http://developer.gnome.org/tools/cvs.html">Gnome CVS Tools</a>
|
||||
page; the CVS module is <b>libxml2</b>.</p>
|
||||
</li>
|
||||
<li>The <strong>libxslt</strong> module is also present there</li>
|
||||
</ul><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>
|
||||
@@ -1,159 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml"
|
||||
version="1.0">
|
||||
<xsl:output method="text" encoding="ISO-8859-1"/>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:text>/*
|
||||
* elfgcchack.h: hack by Arjan van de Ven <[email protected]> to speed
|
||||
* up the code when using gcc for call within the library.
|
||||
*
|
||||
* Based on the analysis http://people.redhat.com/drepper/dsohowto.pdf
|
||||
* from Ulrich drepper. Rewritten to be generated from the XML description
|
||||
* file for libxml2 API
|
||||
* autogenerated with xsltproc doc/elfgcchack.xsl doc/libxml2-api.xml
|
||||
*/
|
||||
|
||||
#ifdef IN_LIBXML
|
||||
#ifdef __GNUC__
|
||||
#ifdef PIC
|
||||
#ifdef linux
|
||||
#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3)
|
||||
|
||||
#include "libxml/c14n.h"
|
||||
#include "libxml/catalog.h"
|
||||
#include "libxml/chvalid.h"
|
||||
#include "libxml/debugXML.h"
|
||||
#include "libxml/dict.h"
|
||||
#include "libxml/DOCBparser.h"
|
||||
#include "libxml/encoding.h"
|
||||
#include "libxml/entities.h"
|
||||
#include "libxml/globals.h"
|
||||
#include "libxml/hash.h"
|
||||
#include "libxml/HTMLparser.h"
|
||||
#include "libxml/HTMLtree.h"
|
||||
#include "libxml/list.h"
|
||||
#include "libxml/nanoftp.h"
|
||||
#include "libxml/nanohttp.h"
|
||||
#include "libxml/parser.h"
|
||||
#include "libxml/parserInternals.h"
|
||||
#include "libxml/pattern.h"
|
||||
#include "libxml/relaxng.h"
|
||||
#include "libxml/SAX2.h"
|
||||
#include "libxml/SAX.h"
|
||||
#include "libxml/schemasInternals.h"
|
||||
#include "libxml/threads.h"
|
||||
#include "libxml/tree.h"
|
||||
#include "libxml/uri.h"
|
||||
#include "libxml/valid.h"
|
||||
#include "libxml/xinclude.h"
|
||||
#include "libxml/xlink.h"
|
||||
#include "libxml/xmlautomata.h"
|
||||
#include "libxml/xmlerror.h"
|
||||
#include "libxml/xmlexports.h"
|
||||
#include "libxml/xmlIO.h"
|
||||
#include "libxml/xmlmemory.h"
|
||||
#include "libxml/xmlreader.h"
|
||||
#include "libxml/xmlregexp.h"
|
||||
#include "libxml/xmlsave.h"
|
||||
#include "libxml/xmlschemas.h"
|
||||
#include "libxml/xmlschemastypes.h"
|
||||
#include "libxml/xmlstring.h"
|
||||
#include "libxml/xmlunicode.h"
|
||||
#include "libxml/xmlversion.h"
|
||||
#include "libxml/xmlwriter.h"
|
||||
#include "libxml/xpath.h"
|
||||
#include "libxml/xpathInternals.h"
|
||||
#include "libxml/xpointer.h"
|
||||
#include "libxml/xmlmodule.h"
|
||||
|
||||
/* special hot spot not exported ones */
|
||||
|
||||
#ifdef bottom_globals
|
||||
#undef __xmlGenericError
|
||||
extern __typeof (__xmlGenericError) __xmlGenericError __attribute((alias("__xmlGenericError__internal_alias")));
|
||||
#else
|
||||
#ifndef __xmlGenericError
|
||||
extern __typeof (__xmlGenericError) __xmlGenericError__internal_alias __attribute((visibility("hidden")));
|
||||
#define __xmlGenericError __xmlGenericError__internal_alias
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef bottom_globals
|
||||
#undef __xmlGenericErrorContext
|
||||
extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext __attribute((alias("__xmlGenericErrorContext__internal_alias")));
|
||||
#else
|
||||
#ifndef __xmlGenericErrorContext
|
||||
extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext__internal_alias __attribute((visibility("hidden")));
|
||||
#define __xmlGenericErrorContext __xmlGenericErrorContext__internal_alias
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* list generated from libxml2-api.xml */
|
||||
</xsl:text>
|
||||
<xsl:apply-templates select="/api/symbols/function"/>
|
||||
<xsl:text>
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="function">
|
||||
<xsl:variable name="str" select="string(@name)"/>
|
||||
<xsl:if test="starts-with(@name, 'xml') or starts-with(@name, 'html') or contains(@name, 'Push') or contains(@name, 'Pop')">
|
||||
<xsl:variable name="alias" select="concat($str, '__internal_alias')"/>
|
||||
<xsl:apply-templates select="cond"/>
|
||||
<xsl:text>#ifdef bottom_</xsl:text>
|
||||
<xsl:value-of select="string(@module)"/>
|
||||
<xsl:text>
|
||||
#undef </xsl:text>
|
||||
<xsl:value-of select="$str"/>
|
||||
<xsl:text>
|
||||
extern __typeof (</xsl:text>
|
||||
<xsl:value-of select="$str"/>
|
||||
<xsl:text>) </xsl:text>
|
||||
<xsl:value-of select="$str"/>
|
||||
<xsl:text> __attribute((alias("</xsl:text>
|
||||
<xsl:value-of select="$alias"/>
|
||||
<xsl:text>")));
|
||||
#else
|
||||
#ifndef </xsl:text>
|
||||
<xsl:value-of select="$str"/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
<xsl:text>extern __typeof (</xsl:text>
|
||||
<xsl:value-of select="$str"/>
|
||||
<xsl:text>) </xsl:text>
|
||||
<xsl:value-of select="$alias"/>
|
||||
<xsl:text> __attribute((visibility("hidden")));
|
||||
</xsl:text>
|
||||
<xsl:text>#define </xsl:text>
|
||||
<xsl:value-of select="$str"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="$alias"/>
|
||||
<xsl:text>
|
||||
#endif
|
||||
#endif
|
||||
</xsl:text>
|
||||
<xsl:apply-templates select="cond" mode="end"/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
<xsl:template match="cond">
|
||||
<xsl:text>#if </xsl:text>
|
||||
<xsl:value-of select="."/>
|
||||
<xsl:text>
|
||||
</xsl:text>
|
||||
</xsl:template>
|
||||
<xsl:template match="cond" mode="end">
|
||||
<xsl:text>#endif
|
||||
</xsl:text>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
||||
|
||||
@@ -1,215 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>Encodings support</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>Encodings support</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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>If you are not really familiar with Internationalization (usual shortcut
|
||||
is I18N) , Unicode, characters and glyphs, I suggest you read a <a href="http://www.tbray.org/ongoing/When/200x/2003/04/06/Unicode">presentation</a>
|
||||
by Tim Bray on Unicode and why you should care about it.</p><p>If you don't understand why <b>it does not make sense to have a string
|
||||
without knowing what encoding it uses</b>, then as Joel Spolsky said
|
||||
<a href="http://www.joelonsoftware.com/articles/Unicode.html">please do
|
||||
not write another line of code until you finish reading that article.</a>.
|
||||
It is a prerequisite to understand this page, and avoid a lot of problems
|
||||
with libxml2, XML or text processing in general.</p><p>Table of Content:</p><ol><li><a href="encoding.html#What">What does internationalization support
|
||||
mean ?</a></li>
|
||||
<li><a href="encoding.html#internal">The internal encoding, how and
|
||||
why</a></li>
|
||||
<li><a href="encoding.html#implemente">How is it implemented ?</a></li>
|
||||
<li><a href="encoding.html#Default">Default supported encodings</a></li>
|
||||
<li><a href="encoding.html#extend">How to extend the existing
|
||||
support</a></li>
|
||||
</ol><h3><a name="What" id="What">What does internationalization support mean ?</a></h3><p>XML was designed from the start to allow the support of any character set
|
||||
by using Unicode. Any conformant XML parser has to support the UTF-8 and
|
||||
UTF-16 default encodings which can both express the full unicode ranges. UTF8
|
||||
is a variable length encoding whose greatest points are to reuse the same
|
||||
encoding for ASCII and to save space for Western encodings, but it is a bit
|
||||
more complex to handle in practice. UTF-16 use 2 bytes per character (and
|
||||
sometimes combines two pairs), it makes implementation easier, but looks a
|
||||
bit overkill for Western languages encoding. Moreover the XML specification
|
||||
allows the document to be encoded in other encodings at the condition that
|
||||
they are clearly labeled as such. For example the following is a wellformed
|
||||
XML document encoded in ISO-8859-1 and using accentuated letters that we
|
||||
French like for both markup and content:</p><pre><?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<très>là</très></pre><p>Having internationalization support in libxml2 means the following:</p><ul><li>the document is properly parsed</li>
|
||||
<li>informations about it's encoding are saved</li>
|
||||
<li>it can be modified</li>
|
||||
<li>it can be saved in its original encoding</li>
|
||||
<li>it can also be saved in another encoding supported by libxml2 (for
|
||||
example straight UTF8 or even an ASCII form)</li>
|
||||
</ul><p>Another very important point is that the whole libxml2 API, with the
|
||||
exception of a few routines to read with a specific encoding or save to a
|
||||
specific encoding, is completely agnostic about the original encoding of the
|
||||
document.</p><p>It should be noted too that the HTML parser embedded in libxml2 now obey
|
||||
the same rules too, the following document will be (as of 2.2.2) handled in
|
||||
an internationalized fashion by libxml2 too:</p><pre><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
|
||||
</head>
|
||||
<body>
|
||||
<p>W3C crée des standards pour le Web.</body>
|
||||
</html></pre><h3><a name="internal" id="internal">The internal encoding, how and why</a></h3><p>One of the core decisions was to force all documents to be converted to a
|
||||
default internal encoding, and that encoding to be UTF-8, here are the
|
||||
rationales for those choices:</p><ul><li>keeping the native encoding in the internal form would force the libxml
|
||||
users (or the code associated) to be fully aware of the encoding of the
|
||||
original document, for examples when adding a text node to a document,
|
||||
the content would have to be provided in the document encoding, i.e. the
|
||||
client code would have to check it before hand, make sure it's conformant
|
||||
to the encoding, etc ... Very hard in practice, though in some specific
|
||||
cases this may make sense.</li>
|
||||
<li>the second decision was which encoding. From the XML spec only UTF8 and
|
||||
UTF16 really makes sense as being the two only encodings for which there
|
||||
is mandatory support. UCS-4 (32 bits fixed size encoding) could be
|
||||
considered an intelligent choice too since it's a direct Unicode mapping
|
||||
support. I selected UTF-8 on the basis of efficiency and compatibility
|
||||
with surrounding software:
|
||||
<ul><li>UTF-8 while a bit more complex to convert from/to (i.e. slightly
|
||||
more costly to import and export CPU wise) is also far more compact
|
||||
than UTF-16 (and UCS-4) for a majority of the documents I see it used
|
||||
for right now (RPM RDF catalogs, advogato data, various configuration
|
||||
file formats, etc.) and the key point for today's computer
|
||||
architecture is efficient uses of caches. If one nearly double the
|
||||
memory requirement to store the same amount of data, this will trash
|
||||
caches (main memory/external caches/internal caches) and my take is
|
||||
that this harms the system far more than the CPU requirements needed
|
||||
for the conversion to UTF-8</li>
|
||||
<li>Most of libxml2 version 1 users were using it with straight ASCII
|
||||
most of the time, doing the conversion with an internal encoding
|
||||
requiring all their code to be rewritten was a serious show-stopper
|
||||
for using UTF-16 or UCS-4.</li>
|
||||
<li>UTF-8 is being used as the de-facto internal encoding standard for
|
||||
related code like the <a href="http://www.pango.org/">pango</a>
|
||||
upcoming Gnome text widget, and a lot of Unix code (yet another place
|
||||
where Unix programmer base takes a different approach from Microsoft
|
||||
- they are using UTF-16)</li>
|
||||
</ul></li>
|
||||
</ul><p>What does this mean in practice for the libxml2 user:</p><ul><li>xmlChar, the libxml2 data type is a byte, those bytes must be assembled
|
||||
as UTF-8 valid strings. The proper way to terminate an xmlChar * string
|
||||
is simply to append 0 byte, as usual.</li>
|
||||
<li>One just need to make sure that when using chars outside the ASCII set,
|
||||
the values has been properly converted to UTF-8</li>
|
||||
</ul><h3><a name="implemente" id="implemente">How is it implemented ?</a></h3><p>Let's describe how all this works within libxml, basically the I18N
|
||||
(internationalization) support get triggered only during I/O operation, i.e.
|
||||
when reading a document or saving one. Let's look first at the reading
|
||||
sequence:</p><ol><li>when a document is processed, we usually don't know the encoding, a
|
||||
simple heuristic allows to detect UTF-16 and UCS-4 from encodings where
|
||||
the ASCII range (0-0x7F) maps with ASCII</li>
|
||||
<li>the xml declaration if available is parsed, including the encoding
|
||||
declaration. At that point, if the autodetected encoding is different
|
||||
from the one declared a call to xmlSwitchEncoding() is issued.</li>
|
||||
<li>If there is no encoding declaration, then the input has to be in either
|
||||
UTF-8 or UTF-16, if it is not then at some point when processing the
|
||||
input, the converter/checker of UTF-8 form will raise an encoding error.
|
||||
You may end-up with a garbled document, or no document at all ! Example:
|
||||
<pre>~/XML -> ./xmllint err.xml
|
||||
err.xml:1: error: Input is not proper UTF-8, indicate encoding !
|
||||
<très>là</très>
|
||||
^
|
||||
err.xml:1: error: Bytes: 0xE8 0x73 0x3E 0x6C
|
||||
<très>là</très>
|
||||
^</pre>
|
||||
</li>
|
||||
<li>xmlSwitchEncoding() does an encoding name lookup, canonicalize it, and
|
||||
then search the default registered encoding converters for that encoding.
|
||||
If it's not within the default set and iconv() support has been compiled
|
||||
it, it will ask iconv for such an encoder. If this fails then the parser
|
||||
will report an error and stops processing:
|
||||
<pre>~/XML -> ./xmllint err2.xml
|
||||
err2.xml:1: error: Unsupported encoding UnsupportedEnc
|
||||
<?xml version="1.0" encoding="UnsupportedEnc"?>
|
||||
^</pre>
|
||||
</li>
|
||||
<li>From that point the encoder processes progressively the input (it is
|
||||
plugged as a front-end to the I/O module) for that entity. It captures
|
||||
and converts on-the-fly the document to be parsed to UTF-8. The parser
|
||||
itself just does UTF-8 checking of this input and process it
|
||||
transparently. The only difference is that the encoding information has
|
||||
been added to the parsing context (more precisely to the input
|
||||
corresponding to this entity).</li>
|
||||
<li>The result (when using DOM) is an internal form completely in UTF-8
|
||||
with just an encoding information on the document node.</li>
|
||||
</ol><p>Ok then what happens when saving the document (assuming you
|
||||
collected/built an xmlDoc DOM like structure) ? It depends on the function
|
||||
called, xmlSaveFile() will just try to save in the original encoding, while
|
||||
xmlSaveFileTo() and xmlSaveFileEnc() can optionally save to a given
|
||||
encoding:</p><ol><li>if no encoding is given, libxml2 will look for an encoding value
|
||||
associated to the document and if it exists will try to save to that
|
||||
encoding,
|
||||
<p>otherwise everything is written in the internal form, i.e. UTF-8</p>
|
||||
</li>
|
||||
<li>so if an encoding was specified, either at the API level or on the
|
||||
document, libxml2 will again canonicalize the encoding name, lookup for a
|
||||
converter in the registered set or through iconv. If not found the
|
||||
function will return an error code</li>
|
||||
<li>the converter is placed before the I/O buffer layer, as another kind of
|
||||
buffer, then libxml2 will simply push the UTF-8 serialization to through
|
||||
that buffer, which will then progressively be converted and pushed onto
|
||||
the I/O layer.</li>
|
||||
<li>It is possible that the converter code fails on some input, for example
|
||||
trying to push an UTF-8 encoded Chinese character through the UTF-8 to
|
||||
ISO-8859-1 converter won't work. Since the encoders are progressive they
|
||||
will just report the error and the number of bytes converted, at that
|
||||
point libxml2 will decode the offending character, remove it from the
|
||||
buffer and replace it with the associated charRef encoding &#123; and
|
||||
resume the conversion. This guarantees that any document will be saved
|
||||
without losses (except for markup names where this is not legal, this is
|
||||
a problem in the current version, in practice avoid using non-ascii
|
||||
characters for tag or attribute names). A special "ascii" encoding name
|
||||
is used to save documents to a pure ascii form can be used when
|
||||
portability is really crucial</li>
|
||||
</ol><p>Here are a few examples based on the same test document:</p><pre>~/XML -> ./xmllint isolat1
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<très>là</très>
|
||||
~/XML -> ./xmllint --encode UTF-8 isolat1
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<très>là </très>
|
||||
~/XML -> </pre><p>The same processing is applied (and reuse most of the code) for HTML I18N
|
||||
processing. Looking up and modifying the content encoding is a bit more
|
||||
difficult since it is located in a <meta> tag under the <head>,
|
||||
so a couple of functions htmlGetMetaEncoding() and htmlSetMetaEncoding() have
|
||||
been provided. The parser also attempts to switch encoding on the fly when
|
||||
detecting such a tag on input. Except for that the processing is the same
|
||||
(and again reuses the same code).</p><h3><a name="Default" id="Default">Default supported encodings</a></h3><p>libxml2 has a set of default converters for the following encodings
|
||||
(located in encoding.c):</p><ol><li>UTF-8 is supported by default (null handlers)</li>
|
||||
<li>UTF-16, both little and big endian</li>
|
||||
<li>ISO-Latin-1 (ISO-8859-1) covering most western languages</li>
|
||||
<li>ASCII, useful mostly for saving</li>
|
||||
<li>HTML, a specific handler for the conversion of UTF-8 to ASCII with HTML
|
||||
predefined entities like &copy; for the Copyright sign.</li>
|
||||
</ol><p>More over when compiled on an Unix platform with iconv support the full
|
||||
set of encodings supported by iconv can be instantly be used by libxml. On a
|
||||
linux machine with glibc-2.1 the list of supported encodings and aliases fill
|
||||
3 full pages, and include UCS-4, the full set of ISO-Latin encodings, and the
|
||||
various Japanese ones.</p><h4>Encoding aliases</h4><p>From 2.2.3, libxml2 has support to register encoding names aliases. The
|
||||
goal is to be able to parse document whose encoding is supported but where
|
||||
the name differs (for example from the default set of names accepted by
|
||||
iconv). The following functions allow to register and handle new aliases for
|
||||
existing encodings. Once registered libxml2 will automatically lookup the
|
||||
aliases when handling a document:</p><ul><li>int xmlAddEncodingAlias(const char *name, const char *alias);</li>
|
||||
<li>int xmlDelEncodingAlias(const char *alias);</li>
|
||||
<li>const char * xmlGetEncodingAlias(const char *alias);</li>
|
||||
<li>void xmlCleanupEncodingAliases(void);</li>
|
||||
</ul><h3><a name="extend" id="extend">How to extend the existing support</a></h3><p>Well adding support for new encoding, or overriding one of the encoders
|
||||
(assuming it is buggy) should not be hard, just write input and output
|
||||
conversion routines to/from UTF-8, and register them using
|
||||
xmlNewCharEncodingHandler(name, xxxToUTF8, UTF8Toxxx), and they will be
|
||||
called automatically if the parser(s) encounter such an encoding name
|
||||
(register it uppercase, this will help). The description of the encoders,
|
||||
their arguments and expected return values are described in the encoding.h
|
||||
header.</p><p>A quick note on the topic of subverting the parser to use a different
|
||||
internal encoding than UTF-8, in some case people will absolutely want to
|
||||
keep the internal encoding different, I think it's still possible (but the
|
||||
encoding must be compliant with ASCII on the same subrange) though I didn't
|
||||
tried it. The key is to override the default conversion routines (by
|
||||
registering null encoders/decoders for your charsets), and bypass the UTF-8
|
||||
checking of the parser by setting the parser context charset
|
||||
(ctxt->charset) to something different than XML_CHAR_ENCODING_UTF8, but
|
||||
there is no guarantee that this will work. You may also have some troubles
|
||||
saving back.</p><p>Basically proper I18N support is important, this requires at least
|
||||
libxml-2.0.0, but a lot of features and corrections are really available only
|
||||
starting 2.2.</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>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,134 +0,0 @@
|
||||
# Beware this is autogenerated by index.py
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
|
||||
DEPS = $(top_builddir)/libxml2.la
|
||||
LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
|
||||
|
||||
rebuild: examples.xml index.html
|
||||
|
||||
examples.xml: index.py *.c
|
||||
-@($(srcdir)/index.py)
|
||||
|
||||
index.html: examples.xml examples.xsl
|
||||
-@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
-@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
|
||||
|
||||
EXTRA_DIST=examples.xsl index.py test3.xml tst.xml test2.xml writer.xml test1.xml examples.xml xpath1.res tree2.res reader3.res tree1.res reader1.res xpath2.res reader4.res io2.res io1.res
|
||||
|
||||
noinst_PROGRAMS=reader3 io2 reader1 reader2 reader4 testWriter parse3 tree2 tree1 xpath2 parse1 xpath1 io1 parse4 parse2
|
||||
|
||||
reader3_SOURCES=reader3.c
|
||||
reader3_LDFLAGS=
|
||||
reader3_DEPENDENCIES= $(DEPS)
|
||||
reader3_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
io2_SOURCES=io2.c
|
||||
io2_LDFLAGS=
|
||||
io2_DEPENDENCIES= $(DEPS)
|
||||
io2_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
reader1_SOURCES=reader1.c
|
||||
reader1_LDFLAGS=
|
||||
reader1_DEPENDENCIES= $(DEPS)
|
||||
reader1_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
reader2_SOURCES=reader2.c
|
||||
reader2_LDFLAGS=
|
||||
reader2_DEPENDENCIES= $(DEPS)
|
||||
reader2_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
reader4_SOURCES=reader4.c
|
||||
reader4_LDFLAGS=
|
||||
reader4_DEPENDENCIES= $(DEPS)
|
||||
reader4_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
testWriter_SOURCES=testWriter.c
|
||||
testWriter_LDFLAGS=
|
||||
testWriter_DEPENDENCIES= $(DEPS)
|
||||
testWriter_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
parse3_SOURCES=parse3.c
|
||||
parse3_LDFLAGS=
|
||||
parse3_DEPENDENCIES= $(DEPS)
|
||||
parse3_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
tree2_SOURCES=tree2.c
|
||||
tree2_LDFLAGS=
|
||||
tree2_DEPENDENCIES= $(DEPS)
|
||||
tree2_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
tree1_SOURCES=tree1.c
|
||||
tree1_LDFLAGS=
|
||||
tree1_DEPENDENCIES= $(DEPS)
|
||||
tree1_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
xpath2_SOURCES=xpath2.c
|
||||
xpath2_LDFLAGS=
|
||||
xpath2_DEPENDENCIES= $(DEPS)
|
||||
xpath2_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
parse1_SOURCES=parse1.c
|
||||
parse1_LDFLAGS=
|
||||
parse1_DEPENDENCIES= $(DEPS)
|
||||
parse1_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
xpath1_SOURCES=xpath1.c
|
||||
xpath1_LDFLAGS=
|
||||
xpath1_DEPENDENCIES= $(DEPS)
|
||||
xpath1_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
io1_SOURCES=io1.c
|
||||
io1_LDFLAGS=
|
||||
io1_DEPENDENCIES= $(DEPS)
|
||||
io1_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
parse4_SOURCES=parse4.c
|
||||
parse4_LDFLAGS=
|
||||
parse4_DEPENDENCIES= $(DEPS)
|
||||
parse4_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
parse2_SOURCES=parse2.c
|
||||
parse2_LDFLAGS=
|
||||
parse2_DEPENDENCIES= $(DEPS)
|
||||
parse2_LDADD= @RDL_LIBS@ $(LDADDS)
|
||||
|
||||
valgrind:
|
||||
$(MAKE) CHECKER='valgrind' tests
|
||||
|
||||
tests: $(noinst_PROGRAMS)
|
||||
@(echo '## examples regression tests')
|
||||
@(echo > .memdump)
|
||||
@($(CHECKER) ./reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse3)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse1 test1.xml)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ././xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse4 test3.xml)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse2 test2.xml)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
|
||||
|
||||
@@ -1,743 +0,0 @@
|
||||
# Makefile.in generated by automake 1.9.2 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
SOURCES = $(io1_SOURCES) $(io2_SOURCES) $(parse1_SOURCES) $(parse2_SOURCES) $(parse3_SOURCES) $(parse4_SOURCES) $(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) $(reader4_SOURCES) $(testWriter_SOURCES) $(tree1_SOURCES) $(tree2_SOURCES) $(xpath1_SOURCES) $(xpath2_SOURCES)
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
top_builddir = ../..
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
INSTALL = @INSTALL@
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
noinst_PROGRAMS = reader3$(EXEEXT) io2$(EXEEXT) reader1$(EXEEXT) \
|
||||
reader2$(EXEEXT) reader4$(EXEEXT) testWriter$(EXEEXT) \
|
||||
parse3$(EXEEXT) tree2$(EXEEXT) tree1$(EXEEXT) xpath2$(EXEEXT) \
|
||||
parse1$(EXEEXT) xpath1$(EXEEXT) io1$(EXEEXT) parse4$(EXEEXT) \
|
||||
parse2$(EXEEXT)
|
||||
subdir = doc/examples
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
PROGRAMS = $(noinst_PROGRAMS)
|
||||
am_io1_OBJECTS = io1.$(OBJEXT)
|
||||
io1_OBJECTS = $(am_io1_OBJECTS)
|
||||
am__DEPENDENCIES_1 =
|
||||
am__DEPENDENCIES_2 = $(top_builddir)/libxml2.la $(am__DEPENDENCIES_1)
|
||||
am_io2_OBJECTS = io2.$(OBJEXT)
|
||||
io2_OBJECTS = $(am_io2_OBJECTS)
|
||||
am_parse1_OBJECTS = parse1.$(OBJEXT)
|
||||
parse1_OBJECTS = $(am_parse1_OBJECTS)
|
||||
am_parse2_OBJECTS = parse2.$(OBJEXT)
|
||||
parse2_OBJECTS = $(am_parse2_OBJECTS)
|
||||
am_parse3_OBJECTS = parse3.$(OBJEXT)
|
||||
parse3_OBJECTS = $(am_parse3_OBJECTS)
|
||||
am_parse4_OBJECTS = parse4.$(OBJEXT)
|
||||
parse4_OBJECTS = $(am_parse4_OBJECTS)
|
||||
am_reader1_OBJECTS = reader1.$(OBJEXT)
|
||||
reader1_OBJECTS = $(am_reader1_OBJECTS)
|
||||
am_reader2_OBJECTS = reader2.$(OBJEXT)
|
||||
reader2_OBJECTS = $(am_reader2_OBJECTS)
|
||||
am_reader3_OBJECTS = reader3.$(OBJEXT)
|
||||
reader3_OBJECTS = $(am_reader3_OBJECTS)
|
||||
am_reader4_OBJECTS = reader4.$(OBJEXT)
|
||||
reader4_OBJECTS = $(am_reader4_OBJECTS)
|
||||
am_testWriter_OBJECTS = testWriter.$(OBJEXT)
|
||||
testWriter_OBJECTS = $(am_testWriter_OBJECTS)
|
||||
am_tree1_OBJECTS = tree1.$(OBJEXT)
|
||||
tree1_OBJECTS = $(am_tree1_OBJECTS)
|
||||
am_tree2_OBJECTS = tree2.$(OBJEXT)
|
||||
tree2_OBJECTS = $(am_tree2_OBJECTS)
|
||||
am_xpath1_OBJECTS = xpath1.$(OBJEXT)
|
||||
xpath1_OBJECTS = $(am_xpath1_OBJECTS)
|
||||
am_xpath2_OBJECTS = xpath2.$(OBJEXT)
|
||||
xpath2_OBJECTS = $(am_xpath2_OBJECTS)
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \
|
||||
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
|
||||
$(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
SOURCES = $(io1_SOURCES) $(io2_SOURCES) $(parse1_SOURCES) \
|
||||
$(parse2_SOURCES) $(parse3_SOURCES) $(parse4_SOURCES) \
|
||||
$(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) \
|
||||
$(reader4_SOURCES) $(testWriter_SOURCES) $(tree1_SOURCES) \
|
||||
$(tree2_SOURCES) $(xpath1_SOURCES) $(xpath2_SOURCES)
|
||||
DIST_SOURCES = $(io1_SOURCES) $(io2_SOURCES) $(parse1_SOURCES) \
|
||||
$(parse2_SOURCES) $(parse3_SOURCES) $(parse4_SOURCES) \
|
||||
$(reader1_SOURCES) $(reader2_SOURCES) $(reader3_SOURCES) \
|
||||
$(reader4_SOURCES) $(testWriter_SOURCES) $(tree1_SOURCES) \
|
||||
$(tree2_SOURCES) $(xpath1_SOURCES) $(xpath2_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMDEP_FALSE = @AMDEP_FALSE@
|
||||
AMDEP_TRUE = @AMDEP_TRUE@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
AS = @AS@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
BASE_THREAD_LIBS = @BASE_THREAD_LIBS@
|
||||
C14N_OBJ = @C14N_OBJ@
|
||||
CATALOG_OBJ = @CATALOG_OBJ@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
CYGWIN_EXTRA_LDFLAGS = @CYGWIN_EXTRA_LDFLAGS@
|
||||
CYGWIN_EXTRA_PYTHON_LIBADD = @CYGWIN_EXTRA_PYTHON_LIBADD@
|
||||
DEBUG_OBJ = @DEBUG_OBJ@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DOCB_OBJ = @DOCB_OBJ@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FTP_OBJ = @FTP_OBJ@
|
||||
HAVE_ISINF = @HAVE_ISINF@
|
||||
HAVE_ISNAN = @HAVE_ISNAN@
|
||||
HTML_DIR = @HTML_DIR@
|
||||
HTML_OBJ = @HTML_OBJ@
|
||||
HTTP_OBJ = @HTTP_OBJ@
|
||||
ICONV_LIBS = @ICONV_LIBS@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBXML_MAJOR_VERSION = @LIBXML_MAJOR_VERSION@
|
||||
LIBXML_MICRO_VERSION = @LIBXML_MICRO_VERSION@
|
||||
LIBXML_MINOR_VERSION = @LIBXML_MINOR_VERSION@
|
||||
LIBXML_VERSION = @LIBXML_VERSION@
|
||||
LIBXML_VERSION_EXTRA = @LIBXML_VERSION_EXTRA@
|
||||
LIBXML_VERSION_INFO = @LIBXML_VERSION_INFO@
|
||||
LIBXML_VERSION_NUMBER = @LIBXML_VERSION_NUMBER@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MODULE_EXTENSION = @MODULE_EXTENSION@
|
||||
MODULE_PLATFORM_LIBS = @MODULE_PLATFORM_LIBS@
|
||||
MV = @MV@
|
||||
M_LIBS = @M_LIBS@
|
||||
OBJDUMP = @OBJDUMP@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PERL = @PERL@
|
||||
PYTHON = @PYTHON@
|
||||
PYTHON_INCLUDES = @PYTHON_INCLUDES@
|
||||
PYTHON_SITE_PACKAGES = @PYTHON_SITE_PACKAGES@
|
||||
PYTHON_SUBDIR = @PYTHON_SUBDIR@
|
||||
PYTHON_TESTS = @PYTHON_TESTS@
|
||||
PYTHON_VERSION = @PYTHON_VERSION@
|
||||
RANLIB = @RANLIB@
|
||||
RDL_LIBS = @RDL_LIBS@
|
||||
READER_TEST = @READER_TEST@
|
||||
RELDATE = @RELDATE@
|
||||
RM = @RM@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STATIC_BINARIES = @STATIC_BINARIES@
|
||||
STRIP = @STRIP@
|
||||
TAR = @TAR@
|
||||
TEST_C14N = @TEST_C14N@
|
||||
TEST_CATALOG = @TEST_CATALOG@
|
||||
TEST_DEBUG = @TEST_DEBUG@
|
||||
TEST_HTML = @TEST_HTML@
|
||||
TEST_MODULES = @TEST_MODULES@
|
||||
TEST_PATTERN = @TEST_PATTERN@
|
||||
TEST_PHTML = @TEST_PHTML@
|
||||
TEST_PUSH = @TEST_PUSH@
|
||||
TEST_REGEXPS = @TEST_REGEXPS@
|
||||
TEST_SAX = @TEST_SAX@
|
||||
TEST_SCHEMAS = @TEST_SCHEMAS@
|
||||
TEST_THREADS = @TEST_THREADS@
|
||||
TEST_VALID = @TEST_VALID@
|
||||
TEST_VTIME = @TEST_VTIME@
|
||||
TEST_XINCLUDE = @TEST_XINCLUDE@
|
||||
TEST_XPATH = @TEST_XPATH@
|
||||
TEST_XPTR = @TEST_XPTR@
|
||||
THREADS_W32 = @THREADS_W32@
|
||||
THREAD_CFLAGS = @THREAD_CFLAGS@
|
||||
THREAD_LIBS = @THREAD_LIBS@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
WIN32_EXTRA_LDFLAGS = @WIN32_EXTRA_LDFLAGS@
|
||||
WIN32_EXTRA_LIBADD = @WIN32_EXTRA_LIBADD@
|
||||
WITH_C14N = @WITH_C14N@
|
||||
WITH_CATALOG = @WITH_CATALOG@
|
||||
WITH_DEBUG = @WITH_DEBUG@
|
||||
WITH_DOCB = @WITH_DOCB@
|
||||
WITH_FTP = @WITH_FTP@
|
||||
WITH_HTML = @WITH_HTML@
|
||||
WITH_HTTP = @WITH_HTTP@
|
||||
WITH_ICONV = @WITH_ICONV@
|
||||
WITH_ISO8859X = @WITH_ISO8859X@
|
||||
WITH_LEGACY = @WITH_LEGACY@
|
||||
WITH_MEM_DEBUG = @WITH_MEM_DEBUG@
|
||||
WITH_MODULES = @WITH_MODULES@
|
||||
WITH_OUTPUT = @WITH_OUTPUT@
|
||||
WITH_PATTERN = @WITH_PATTERN@
|
||||
WITH_PUSH = @WITH_PUSH@
|
||||
WITH_PYTHON_FALSE = @WITH_PYTHON_FALSE@
|
||||
WITH_PYTHON_TRUE = @WITH_PYTHON_TRUE@
|
||||
WITH_READER = @WITH_READER@
|
||||
WITH_REGEXPS = @WITH_REGEXPS@
|
||||
WITH_RUN_DEBUG = @WITH_RUN_DEBUG@
|
||||
WITH_SAX1 = @WITH_SAX1@
|
||||
WITH_SCHEMAS = @WITH_SCHEMAS@
|
||||
WITH_THREADS = @WITH_THREADS@
|
||||
WITH_TREE = @WITH_TREE@
|
||||
WITH_TRIO = @WITH_TRIO@
|
||||
WITH_TRIO_SOURCES_FALSE = @WITH_TRIO_SOURCES_FALSE@
|
||||
WITH_TRIO_SOURCES_TRUE = @WITH_TRIO_SOURCES_TRUE@
|
||||
WITH_VALID = @WITH_VALID@
|
||||
WITH_WRITER = @WITH_WRITER@
|
||||
WITH_XINCLUDE = @WITH_XINCLUDE@
|
||||
WITH_XPATH = @WITH_XPATH@
|
||||
WITH_XPTR = @WITH_XPTR@
|
||||
XINCLUDE_OBJ = @XINCLUDE_OBJ@
|
||||
XMLLINT = @XMLLINT@
|
||||
XML_CFLAGS = @XML_CFLAGS@
|
||||
XML_INCLUDEDIR = @XML_INCLUDEDIR@
|
||||
XML_LIBDIR = @XML_LIBDIR@
|
||||
XML_LIBS = @XML_LIBS@
|
||||
XML_LIBTOOLLIBS = @XML_LIBTOOLLIBS@
|
||||
XPATH_OBJ = @XPATH_OBJ@
|
||||
XPTR_OBJ = @XPTR_OBJ@
|
||||
XSLTPROC = @XSLTPROC@
|
||||
Z_CFLAGS = @Z_CFLAGS@
|
||||
Z_LIBS = @Z_LIBS@
|
||||
ac_ct_AR = @ac_ct_AR@
|
||||
ac_ct_AS = @ac_ct_AS@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
|
||||
ac_ct_RANLIB = @ac_ct_RANLIB@
|
||||
ac_ct_STRIP = @ac_ct_STRIP@
|
||||
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
|
||||
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
|
||||
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
|
||||
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
datadir = @datadir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
pythondir = @pythondir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
|
||||
# Beware this is autogenerated by index.py
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
|
||||
DEPS = $(top_builddir)/libxml2.la
|
||||
LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
|
||||
EXTRA_DIST = examples.xsl index.py test3.xml tst.xml test2.xml writer.xml test1.xml examples.xml xpath1.res tree2.res reader3.res tree1.res reader1.res xpath2.res reader4.res io2.res io1.res
|
||||
reader3_SOURCES = reader3.c
|
||||
reader3_LDFLAGS =
|
||||
reader3_DEPENDENCIES = $(DEPS)
|
||||
reader3_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
io2_SOURCES = io2.c
|
||||
io2_LDFLAGS =
|
||||
io2_DEPENDENCIES = $(DEPS)
|
||||
io2_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
reader1_SOURCES = reader1.c
|
||||
reader1_LDFLAGS =
|
||||
reader1_DEPENDENCIES = $(DEPS)
|
||||
reader1_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
reader2_SOURCES = reader2.c
|
||||
reader2_LDFLAGS =
|
||||
reader2_DEPENDENCIES = $(DEPS)
|
||||
reader2_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
reader4_SOURCES = reader4.c
|
||||
reader4_LDFLAGS =
|
||||
reader4_DEPENDENCIES = $(DEPS)
|
||||
reader4_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
testWriter_SOURCES = testWriter.c
|
||||
testWriter_LDFLAGS =
|
||||
testWriter_DEPENDENCIES = $(DEPS)
|
||||
testWriter_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
parse3_SOURCES = parse3.c
|
||||
parse3_LDFLAGS =
|
||||
parse3_DEPENDENCIES = $(DEPS)
|
||||
parse3_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
tree2_SOURCES = tree2.c
|
||||
tree2_LDFLAGS =
|
||||
tree2_DEPENDENCIES = $(DEPS)
|
||||
tree2_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
tree1_SOURCES = tree1.c
|
||||
tree1_LDFLAGS =
|
||||
tree1_DEPENDENCIES = $(DEPS)
|
||||
tree1_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
xpath2_SOURCES = xpath2.c
|
||||
xpath2_LDFLAGS =
|
||||
xpath2_DEPENDENCIES = $(DEPS)
|
||||
xpath2_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
parse1_SOURCES = parse1.c
|
||||
parse1_LDFLAGS =
|
||||
parse1_DEPENDENCIES = $(DEPS)
|
||||
parse1_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
xpath1_SOURCES = xpath1.c
|
||||
xpath1_LDFLAGS =
|
||||
xpath1_DEPENDENCIES = $(DEPS)
|
||||
xpath1_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
io1_SOURCES = io1.c
|
||||
io1_LDFLAGS =
|
||||
io1_DEPENDENCIES = $(DEPS)
|
||||
io1_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
parse4_SOURCES = parse4.c
|
||||
parse4_LDFLAGS =
|
||||
parse4_DEPENDENCIES = $(DEPS)
|
||||
parse4_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
parse2_SOURCES = parse2.c
|
||||
parse2_LDFLAGS =
|
||||
parse2_DEPENDENCIES = $(DEPS)
|
||||
parse2_LDADD = @RDL_LIBS@ $(LDADDS)
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .lo .o .obj
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/examples/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/examples/Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
clean-noinstPROGRAMS:
|
||||
@list='$(noinst_PROGRAMS)'; for p in $$list; do \
|
||||
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f $$p $$f"; \
|
||||
rm -f $$p $$f ; \
|
||||
done
|
||||
io1$(EXEEXT): $(io1_OBJECTS) $(io1_DEPENDENCIES)
|
||||
@rm -f io1$(EXEEXT)
|
||||
$(LINK) $(io1_LDFLAGS) $(io1_OBJECTS) $(io1_LDADD) $(LIBS)
|
||||
io2$(EXEEXT): $(io2_OBJECTS) $(io2_DEPENDENCIES)
|
||||
@rm -f io2$(EXEEXT)
|
||||
$(LINK) $(io2_LDFLAGS) $(io2_OBJECTS) $(io2_LDADD) $(LIBS)
|
||||
parse1$(EXEEXT): $(parse1_OBJECTS) $(parse1_DEPENDENCIES)
|
||||
@rm -f parse1$(EXEEXT)
|
||||
$(LINK) $(parse1_LDFLAGS) $(parse1_OBJECTS) $(parse1_LDADD) $(LIBS)
|
||||
parse2$(EXEEXT): $(parse2_OBJECTS) $(parse2_DEPENDENCIES)
|
||||
@rm -f parse2$(EXEEXT)
|
||||
$(LINK) $(parse2_LDFLAGS) $(parse2_OBJECTS) $(parse2_LDADD) $(LIBS)
|
||||
parse3$(EXEEXT): $(parse3_OBJECTS) $(parse3_DEPENDENCIES)
|
||||
@rm -f parse3$(EXEEXT)
|
||||
$(LINK) $(parse3_LDFLAGS) $(parse3_OBJECTS) $(parse3_LDADD) $(LIBS)
|
||||
parse4$(EXEEXT): $(parse4_OBJECTS) $(parse4_DEPENDENCIES)
|
||||
@rm -f parse4$(EXEEXT)
|
||||
$(LINK) $(parse4_LDFLAGS) $(parse4_OBJECTS) $(parse4_LDADD) $(LIBS)
|
||||
reader1$(EXEEXT): $(reader1_OBJECTS) $(reader1_DEPENDENCIES)
|
||||
@rm -f reader1$(EXEEXT)
|
||||
$(LINK) $(reader1_LDFLAGS) $(reader1_OBJECTS) $(reader1_LDADD) $(LIBS)
|
||||
reader2$(EXEEXT): $(reader2_OBJECTS) $(reader2_DEPENDENCIES)
|
||||
@rm -f reader2$(EXEEXT)
|
||||
$(LINK) $(reader2_LDFLAGS) $(reader2_OBJECTS) $(reader2_LDADD) $(LIBS)
|
||||
reader3$(EXEEXT): $(reader3_OBJECTS) $(reader3_DEPENDENCIES)
|
||||
@rm -f reader3$(EXEEXT)
|
||||
$(LINK) $(reader3_LDFLAGS) $(reader3_OBJECTS) $(reader3_LDADD) $(LIBS)
|
||||
reader4$(EXEEXT): $(reader4_OBJECTS) $(reader4_DEPENDENCIES)
|
||||
@rm -f reader4$(EXEEXT)
|
||||
$(LINK) $(reader4_LDFLAGS) $(reader4_OBJECTS) $(reader4_LDADD) $(LIBS)
|
||||
testWriter$(EXEEXT): $(testWriter_OBJECTS) $(testWriter_DEPENDENCIES)
|
||||
@rm -f testWriter$(EXEEXT)
|
||||
$(LINK) $(testWriter_LDFLAGS) $(testWriter_OBJECTS) $(testWriter_LDADD) $(LIBS)
|
||||
tree1$(EXEEXT): $(tree1_OBJECTS) $(tree1_DEPENDENCIES)
|
||||
@rm -f tree1$(EXEEXT)
|
||||
$(LINK) $(tree1_LDFLAGS) $(tree1_OBJECTS) $(tree1_LDADD) $(LIBS)
|
||||
tree2$(EXEEXT): $(tree2_OBJECTS) $(tree2_DEPENDENCIES)
|
||||
@rm -f tree2$(EXEEXT)
|
||||
$(LINK) $(tree2_LDFLAGS) $(tree2_OBJECTS) $(tree2_LDADD) $(LIBS)
|
||||
xpath1$(EXEEXT): $(xpath1_OBJECTS) $(xpath1_DEPENDENCIES)
|
||||
@rm -f xpath1$(EXEEXT)
|
||||
$(LINK) $(xpath1_LDFLAGS) $(xpath1_OBJECTS) $(xpath1_LDADD) $(LIBS)
|
||||
xpath2$(EXEEXT): $(xpath2_OBJECTS) $(xpath2_DEPENDENCIES)
|
||||
@rm -f xpath2$(EXEEXT)
|
||||
$(LINK) $(xpath2_LDFLAGS) $(xpath2_OBJECTS) $(xpath2_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io1.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse1.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse3.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse4.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader1.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader3.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reader4.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testWriter.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree1.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tree2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpath1.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xpath2.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
.c.lo:
|
||||
@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
|
||||
@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
uninstall-info-am:
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
|
||||
list='$(DISTFILES)'; for file in $$list; do \
|
||||
case $$file in \
|
||||
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
|
||||
esac; \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
|
||||
dir="/$$dir"; \
|
||||
$(mkdir_p) "$(distdir)$$dir"; \
|
||||
else \
|
||||
dir=''; \
|
||||
fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS)
|
||||
installdirs:
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-data-local
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
|
||||
mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-libtool clean-noinstPROGRAMS ctags distclean \
|
||||
distclean-compile distclean-generic distclean-libtool \
|
||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am \
|
||||
install-data-local install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-info-am
|
||||
|
||||
|
||||
rebuild: examples.xml index.html
|
||||
|
||||
examples.xml: index.py *.c
|
||||
-@($(srcdir)/index.py)
|
||||
|
||||
index.html: examples.xml examples.xsl
|
||||
-@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
-@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
|
||||
|
||||
valgrind:
|
||||
$(MAKE) CHECKER='valgrind' tests
|
||||
|
||||
tests: $(noinst_PROGRAMS)
|
||||
@(echo '## examples regression tests')
|
||||
@(echo > .memdump)
|
||||
@($(CHECKER) ./reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse3)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse1 test1.xml)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ././xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse4 test3.xml)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
@($(CHECKER) ./parse2 test2.xml)
|
||||
@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -1,751 +0,0 @@
|
||||
<examples>
|
||||
<example filename='reader3.c'>
|
||||
<synopsis>Show how to extract subdocuments with xmlReader</synopsis>
|
||||
<purpose>Demonstrate the use of xmlTextReaderPreservePattern() to parse an XML file with the xmlReader while collecting only some subparts of the document. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
|
||||
<usage>reader3</usage>
|
||||
<test>reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>xmlReader</section>
|
||||
<includes>
|
||||
<include><libxml/xmlreader.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='106' file='parser' name='xmlCleanupParser'/>
|
||||
<typedef line='31' file='xmlreader' name='xmlTextReaderPtr'/>
|
||||
<function line='110' file='xmlmemory' name='xmlMemoryDump'/>
|
||||
<function line='99' file='tree' name='xmlFreeDoc'/>
|
||||
<function line='65' file='xmlreader' name='xmlFreeTextReader'/>
|
||||
<macro line='90' file='xmlversion' name='LIBXML_TEST_VERSION'/>
|
||||
<function line='95' file='tree' name='xmlDocDump'/>
|
||||
<function line='51' file='xmlreader' name='xmlTextReaderRead'/>
|
||||
<function line='61' file='xmlreader' name='xmlTextReaderCurrentDoc'/>
|
||||
<function line='42' file='xmlreader' name='xmlTextReaderPreservePattern'/>
|
||||
<function line='37' file='xmlreader' name='xmlReaderForFile'/>
|
||||
<typedef line='76' file='tree' name='xmlDocPtr'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='io2.c'>
|
||||
<synopsis>Output to char buffer</synopsis>
|
||||
<purpose>Demonstrate the use of xmlDocDumpMemory to output document to a character buffer</purpose>
|
||||
<usage>io2</usage>
|
||||
<test>io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp</test>
|
||||
<author>John Fleck</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>InputOutput</section>
|
||||
<includes>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='29' file='tree' name='xmlNodeSetContent'/>
|
||||
<function line='36' file='tree' name='xmlDocDumpFormatMemory'/>
|
||||
<variable line='42' file='globals' name='xmlFree'/>
|
||||
<function line='30' file='tree' name='xmlDocSetRootElement'/>
|
||||
<typedef line='20' file='tree' name='xmlDocPtr'/>
|
||||
<function line='43' file='tree' name='xmlFreeDoc'/>
|
||||
<typedef line='19' file='tree' name='xmlNodePtr'/>
|
||||
<function line='27' file='tree' name='xmlNewDoc'/>
|
||||
<function line='28' file='tree' name='xmlNewNode'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='reader1.c'>
|
||||
<synopsis>Parse an XML file with an xmlReader</synopsis>
|
||||
<purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file and dump the informations about the nodes found in the process. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
|
||||
<usage>reader1 <filename></usage>
|
||||
<test>reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>xmlReader</section>
|
||||
<includes>
|
||||
<include><libxml/xmlreader.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='44' file='xmlstring' name='xmlStrlen'/>
|
||||
<function line='94' file='parser' name='xmlCleanupParser'/>
|
||||
<function line='37' file='xmlreader' name='xmlTextReaderNodeType'/>
|
||||
<typedef line='59' file='xmlreader' name='xmlTextReaderPtr'/>
|
||||
<function line='98' file='xmlmemory' name='xmlMemoryDump'/>
|
||||
<function line='33' file='xmlreader' name='xmlTextReaderConstValue'/>
|
||||
<function line='36' file='xmlreader' name='xmlTextReaderDepth'/>
|
||||
<function line='69' file='xmlreader' name='xmlFreeTextReader'/>
|
||||
<macro line='89' file='xmlversion' name='LIBXML_TEST_VERSION'/>
|
||||
<function line='29' file='xmlreader' name='xmlTextReaderConstName'/>
|
||||
<function line='40' file='xmlreader' name='xmlTextReaderHasValue'/>
|
||||
<function line='67' file='xmlreader' name='xmlTextReaderRead'/>
|
||||
<function line='39' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
|
||||
<function line='62' file='xmlreader' name='xmlReaderForFile'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='reader2.c'>
|
||||
<synopsis>Parse and validate an XML file with an xmlReader</synopsis>
|
||||
<purpose>Demonstrate the use of xmlReaderForFile() to parse an XML file validating the content in the process and activating options like entities substitution, and DTD attributes defaulting. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
|
||||
<usage>reader2 <valid_xml_filename></usage>
|
||||
<test>reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>xmlReader</section>
|
||||
<includes>
|
||||
<include><libxml/xmlreader.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='45' file='xmlstring' name='xmlStrlen'/>
|
||||
<function line='109' file='parser' name='xmlCleanupParser'/>
|
||||
<function line='38' file='xmlreader' name='xmlTextReaderNodeType'/>
|
||||
<typedef line='60' file='xmlreader' name='xmlTextReaderPtr'/>
|
||||
<function line='113' file='xmlmemory' name='xmlMemoryDump'/>
|
||||
<function line='34' file='xmlreader' name='xmlTextReaderConstValue'/>
|
||||
<enum line='70' file='parser' name='XML_PARSE_NOENT'/>
|
||||
<function line='37' file='xmlreader' name='xmlTextReaderDepth'/>
|
||||
<enum line='71' file='parser' name='XML_PARSE_DTDVALID'/>
|
||||
<enum line='69' file='parser' name='XML_PARSE_DTDATTR'/>
|
||||
<function line='84' file='xmlreader' name='xmlFreeTextReader'/>
|
||||
<macro line='104' file='xmlversion' name='LIBXML_TEST_VERSION'/>
|
||||
<function line='30' file='xmlreader' name='xmlTextReaderConstName'/>
|
||||
<function line='41' file='xmlreader' name='xmlTextReaderHasValue'/>
|
||||
<function line='76' file='xmlreader' name='xmlTextReaderRead'/>
|
||||
<function line='40' file='xmlreader' name='xmlTextReaderIsEmptyElement'/>
|
||||
<function line='68' file='xmlreader' name='xmlReaderForFile'/>
|
||||
<function line='81' file='xmlreader' name='xmlTextReaderIsValid'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='reader4.c'>
|
||||
<synopsis>Parse multiple XML files reusing an xmlReader</synopsis>
|
||||
<purpose>Demonstrate the use of xmlReaderForFile() and xmlReaderNewFile to parse XML files while reusing the reader object and parser context. (Note that the XMLReader functions require libxml2 version later than 2.6.)</purpose>
|
||||
<usage>reader4 <filename> [ filename ... ]</usage>
|
||||
<test>reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp</test>
|
||||
<author>Graham Bennett</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>xmlReader</section>
|
||||
<includes>
|
||||
<include><libxml/xmlreader.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='99' file='tree' name='xmlFreeDoc'/>
|
||||
<typedef line='54' file='xmlreader' name='xmlTextReaderPtr'/>
|
||||
<function line='109' file='parser' name='xmlCleanupParser'/>
|
||||
<function line='113' file='xmlmemory' name='xmlMemoryDump'/>
|
||||
<function line='83' file='xmlreader' name='xmlReaderNewFile'/>
|
||||
<function line='104' file='xmlreader' name='xmlFreeTextReader'/>
|
||||
<macro line='72' file='xmlversion' name='LIBXML_TEST_VERSION'/>
|
||||
<function line='26' file='xmlreader' name='xmlTextReaderRead'/>
|
||||
<function line='97' file='xmlreader' name='xmlTextReaderCurrentDoc'/>
|
||||
<function line='72' file='xmlreader' name='xmlReaderForFile'/>
|
||||
<typedef line='56' file='tree' name='xmlDocPtr'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='testWriter.c'>
|
||||
<synopsis>use various APIs for the xmlWriter</synopsis>
|
||||
<purpose>tests a number of APIs for the xmlWriter, especially the various methods to write to a filename, to a memory buffer, to a new document, or to a subtree. It shows how to do encoding string conversions too. The resulting documents are then serialized.</purpose>
|
||||
<usage>testWriter</usage>
|
||||
<test>testWriter ; for i in 1 2 3 4 ; do diff writer.xml writer$$i.res ; done ; rm writer*.res</test>
|
||||
<author>Alfred Mickautsch</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>xmlWriter</section>
|
||||
<includes>
|
||||
<include><libxml/encoding.h></include>
|
||||
<include><libxml/xmlwriter.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='913' file='xmlwriter' name='xmlTextWriterStartDocument'/>
|
||||
<function line='1121' file='xmlwriter' name='xmlTextWriterEndDocument'/>
|
||||
<variable line='1183' file='globals' name='xmlRealloc'/>
|
||||
<function line='925' file='xmlwriter' name='xmlTextWriterWriteComment'/>
|
||||
<function line='1156' file='encoding' name='xmlFindCharEncodingHandler'/>
|
||||
<variable line='1166' file='globals' name='xmlMalloc'/>
|
||||
<typedef line='879' file='tree' name='xmlDocPtr'/>
|
||||
<typedef line='341' file='tree' name='xmlBufferPtr'/>
|
||||
<function line='58' file='xmlmemory' name='xmlMemoryDump'/>
|
||||
<macro line='885' file='parser' name='XML_DEFAULT_VERSION'/>
|
||||
<function line='901' file='tree' name='xmlDocSetRootElement'/>
|
||||
<function line='1127' file='xmlwriter' name='xmlFreeTextWriter'/>
|
||||
<function line='1096' file='xmlwriter' name='xmlTextWriterStartElement'/>
|
||||
<function line='347' file='tree' name='xmlBufferCreate'/>
|
||||
<function line='1111' file='xmlwriter' name='xmlTextWriterEndElement'/>
|
||||
<function line='76' file='xmlwriter' name='xmlNewTextWriterFilename'/>
|
||||
<function line='959' file='xmlwriter' name='xmlTextWriterWriteFormatComment'/>
|
||||
<function line='54' file='parser' name='xmlCleanupParser'/>
|
||||
<function line='1073' file='xmlwriter' name='xmlTextWriterWriteFormatElement'/>
|
||||
<typedef line='1151' file='encoding' name='xmlCharEncodingHandlerPtr'/>
|
||||
<function line='1131' file='tree' name='xmlFreeDoc'/>
|
||||
<typedef line='880' file='tree' name='xmlNodePtr'/>
|
||||
<function line='949' file='xmlwriter' name='xmlTextWriterWriteAttribute'/>
|
||||
<function line='632' file='xmlwriter' name='xmlNewTextWriterDoc'/>
|
||||
<function line='894' file='tree' name='xmlNewDocNode'/>
|
||||
<function line='1129' file='tree' name='xmlSaveFileEnc'/>
|
||||
<function line='904' file='xmlwriter' name='xmlNewTextWriterTree'/>
|
||||
<function line='355' file='xmlwriter' name='xmlNewTextWriterMemory'/>
|
||||
<variable line='1180' file='globals' name='xmlFree'/>
|
||||
<macro line='40' file='xmlversion' name='LIBXML_TEST_VERSION'/>
|
||||
<function line='613' file='tree' name='xmlBufferFree'/>
|
||||
<typedef line='878' file='xmlwriter' name='xmlTextWriterPtr'/>
|
||||
<function line='1103' file='xmlwriter' name='xmlTextWriterWriteElement'/>
|
||||
<function line='885' file='tree' name='xmlNewDoc'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='parse3.c'>
|
||||
<synopsis>Parse an XML document in memory to a tree and free it</synopsis>
|
||||
<purpose>Demonstrate the use of xmlReadMemory() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree</purpose>
|
||||
<usage>parse3</usage>
|
||||
<test>parse3</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Parsing</section>
|
||||
<includes>
|
||||
<include><libxml/tree.h></include>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='33' file='parser' name='xmlReadMemory'/>
|
||||
<function line='58' file='xmlmemory' name='xmlMemoryDump'/>
|
||||
<function line='54' file='parser' name='xmlCleanupParser'/>
|
||||
<macro line='49' file='xmlversion' name='LIBXML_TEST_VERSION'/>
|
||||
<function line='38' file='tree' name='xmlFreeDoc'/>
|
||||
<typedef line='27' file='tree' name='xmlDocPtr'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='tree2.c'>
|
||||
<synopsis>Creates a tree</synopsis>
|
||||
<purpose>Shows how to create document, nodes and dump it to stdout or file.</purpose>
|
||||
<usage>tree2 <filename> -Default output: stdout</usage>
|
||||
<test>tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp</test>
|
||||
<author>Lucas Brasilino <[email protected]></author>
|
||||
<copy>see Copyright for the status of this software </copy>
|
||||
<section>Tree</section>
|
||||
<includes>
|
||||
<include><libxml/tree.h></include>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='75' file='tree' name='xmlNewText'/>
|
||||
<function line='96' file='tree' name='xmlSaveFormatFileEnc'/>
|
||||
<function line='78' file='tree' name='xmlAddChild'/>
|
||||
<function line='41' file='tree' name='xmlDocSetRootElement'/>
|
||||
<function line='89' file='tree' name='xmlNewProp'/>
|
||||
<function line='88' file='tree' name='xmlNewChild'/>
|
||||
<function line='74' file='tree' name='xmlNewNode'/>
|
||||
<function line='46' file='tree' name='xmlCreateIntSubset'/>
|
||||
<function line='99' file='tree' name='xmlFreeDoc'/>
|
||||
<function line='39' file='tree' name='xmlNewDoc'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='tree1.c'>
|
||||
<synopsis>Navigates a tree to print element names</synopsis>
|
||||
<purpose>Parse a file to a tree, use xmlDocGetRootElement() to get the root element, then walk the document and print all the element name in document order.</purpose>
|
||||
<usage>tree1 filename_or_URL</usage>
|
||||
<test>tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp</test>
|
||||
<author>Dodji Seketeli</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Tree</section>
|
||||
<includes>
|
||||
<include><libxml/tree.h></include>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<enum line='36' file='tree' name='XML_ELEMENT_NODE'/>
|
||||
<function line='74' file='tree' name='xmlDocGetRootElement'/>
|
||||
<function line='67' file='parser' name='xmlReadFile'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='xpath2.c'>
|
||||
<synopsis>Load a document, locate subelements with XPath, modify said elements and save the resulting document.</synopsis>
|
||||
<purpose>Shows how to make a full round-trip from a load/edit/save</purpose>
|
||||
<usage>xpath2 <xml-file> <xpath-expr> <new-value></usage>
|
||||
<test>xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp</test>
|
||||
<author>Aleksey Sanin and Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>XPath</section>
|
||||
<includes>
|
||||
<include><libxml/parser.h></include>
|
||||
<include><libxml/xpath.h></include>
|
||||
<include><libxml/xpathInternals.h></include>
|
||||
<include><libxml/tree.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='162' file='tree' name='xmlNodeSetContent'/>
|
||||
<function line='127' file='tree' name='xmlDocDump'/>
|
||||
<typedef line='88' file='xpath' name='xmlXPathObjectPtr'/>
|
||||
<function line='110' file='xpath' name='xmlXPathEvalExpression'/>
|
||||
<function line='95' file='parser' name='xmlParseFile'/>
|
||||
<function line='123' file='xpath' name='xmlXPathFreeObject'/>
|
||||
<function line='102' file='xpath' name='xmlXPathNewContext'/>
|
||||
<typedef line='87' file='xpath' name='xmlXPathContextPtr'/>
|
||||
<function line='124' file='xpath' name='xmlXPathFreeContext'/>
|
||||
<function line='41' file='parser' name='xmlInitParser'/>
|
||||
<enum line='180' file='tree' name='XML_NAMESPACE_DECL'/>
|
||||
<typedef line='86' file='tree' name='xmlDocPtr'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='parse1.c'>
|
||||
<synopsis>Parse an XML file to a tree and free it</synopsis>
|
||||
<purpose>Demonstrate the use of xmlReadFile() to read an XML file into a tree and and xmlFreeDoc() to free the resulting tree</purpose>
|
||||
<usage>parse1 test1.xml</usage>
|
||||
<test>parse1 test1.xml</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Parsing</section>
|
||||
<includes>
|
||||
<include><libxml/tree.h></include>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='26' file='parser' name='xmlReadFile'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='xpath1.c'>
|
||||
<synopsis>Evaluate XPath expression and prints result node set.</synopsis>
|
||||
<purpose>Shows how to evaluate XPath expression and register known namespaces in XPath context.</purpose>
|
||||
<usage>xpath1 <xml-file> <xpath-expr> [<known-ns-list>]</usage>
|
||||
<test>./xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp</test>
|
||||
<author>Aleksey Sanin</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>XPath</section>
|
||||
<includes>
|
||||
<include><libxml/parser.h></include>
|
||||
<include><libxml/xpath.h></include>
|
||||
<include><libxml/xpathInternals.h></include>
|
||||
<include><libxml/tree.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<enum line='229' file='tree' name='XML_ELEMENT_NODE'/>
|
||||
<typedef line='88' file='xpath' name='xmlXPathObjectPtr'/>
|
||||
<function line='117' file='xpath' name='xmlXPathEvalExpression'/>
|
||||
<function line='94' file='parser' name='xmlParseFile'/>
|
||||
<function line='186' file='xpathInternals' name='xmlXPathRegisterNs'/>
|
||||
<function line='129' file='xpath' name='xmlXPathFreeObject'/>
|
||||
<variable line='193' file='globals' name='xmlFree'/>
|
||||
<typedef line='218' file='tree' name='xmlNsPtr'/>
|
||||
<function line='101' file='xpath' name='xmlXPathNewContext'/>
|
||||
<typedef line='87' file='xpath' name='xmlXPathContextPtr'/>
|
||||
<function line='130' file='xpath' name='xmlXPathFreeContext'/>
|
||||
<function line='39' file='parser' name='xmlInitParser'/>
|
||||
<function line='156' file='xmlstring' name='xmlStrdup'/>
|
||||
<function line='180' file='xmlstring' name='xmlStrchr'/>
|
||||
<typedef line='206' file='tree' name='xmlNodePtr'/>
|
||||
<enum line='217' file='tree' name='XML_NAMESPACE_DECL'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='io1.c'>
|
||||
<synopsis>Example of custom Input/Output</synopsis>
|
||||
<purpose>Demonstrate the use of xmlRegisterInputCallbacks to build a custom I/O layer, this is used in an XInclude method context to show how dynamic document can be built in a clean way.</purpose>
|
||||
<usage>io1</usage>
|
||||
<test>io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>InputOutput</section>
|
||||
<includes>
|
||||
<include><libxml/parser.h></include>
|
||||
<include><libxml/xmlIO.h></include>
|
||||
<include><libxml/xinclude.h></include>
|
||||
<include><libxml/tree.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='143' file='tree' name='xmlDocDump'/>
|
||||
<function line='134' file='xinclude' name='xmlXIncludeProcess'/>
|
||||
<function line='117' file='xmlIO' name='xmlRegisterInputCallbacks'/>
|
||||
<function line='124' file='parser' name='xmlReadMemory'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='parse4.c'>
|
||||
<synopsis>Parse an XML document chunk by chunk to a tree and free it</synopsis>
|
||||
<purpose>Demonstrate the use of xmlCreatePushParserCtxt() and xmlParseChunk() to read an XML file progressively into a tree and and xmlFreeDoc() to free the resulting tree</purpose>
|
||||
<usage>parse4 test3.xml</usage>
|
||||
<test>parse4 test3.xml</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Parsing</section>
|
||||
<includes>
|
||||
<include><libxml/tree.h></include>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='94' file='parser' name='xmlFreeParserCtxt'/>
|
||||
<function line='86' file='parser' name='xmlParseChunk'/>
|
||||
<function line='67' file='parser' name='xmlCreatePushParserCtxt'/>
|
||||
<typedef line='45' file='tree' name='xmlParserCtxtPtr'/>
|
||||
</uses>
|
||||
</example>
|
||||
<example filename='parse2.c'>
|
||||
<synopsis>Parse and validate an XML file to a tree and free the result</synopsis>
|
||||
<purpose>Create a parser context for an XML file, then parse and validate the file, creating a tree, check the validation result and xmlFreeDoc() to free the resulting tree.</purpose>
|
||||
<usage>parse2 test2.xml</usage>
|
||||
<test>parse2 test2.xml</test>
|
||||
<author>Daniel Veillard</author>
|
||||
<copy>see Copyright for the status of this software. </copy>
|
||||
<section>Parsing</section>
|
||||
<includes>
|
||||
<include><libxml/tree.h></include>
|
||||
<include><libxml/parser.h></include>
|
||||
</includes>
|
||||
<uses>
|
||||
<function line='47' file='parser' name='xmlFreeParserCtxt'/>
|
||||
<enum line='35' file='parser' name='XML_PARSE_DTDVALID'/>
|
||||
<function line='29' file='parser' name='xmlNewParserCtxt'/>
|
||||
<typedef line='25' file='tree' name='xmlParserCtxtPtr'/>
|
||||
<function line='35' file='parser' name='xmlCtxtReadFile'/>
|
||||
</uses>
|
||||
</example>
|
||||
<symbols>
|
||||
<symbol name='LIBXML_TEST_VERSION'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='parse3.c'/>
|
||||
</symbol>
|
||||
<symbol name='XML_DEFAULT_VERSION'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='XML_ELEMENT_NODE'>
|
||||
<ref filename='tree1.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='XML_NAMESPACE_DECL'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='XML_PARSE_DTDATTR'>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='XML_PARSE_DTDVALID'>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='parse2.c'/>
|
||||
</symbol>
|
||||
<symbol name='XML_PARSE_NOENT'>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlAddChild'>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlBufferCreate'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlBufferFree'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlBufferPtr'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlCharEncodingHandlerPtr'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlCleanupParser'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='parse3.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlCreateIntSubset'>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlCreatePushParserCtxt'>
|
||||
<ref filename='parse4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlCtxtReadFile'>
|
||||
<ref filename='parse2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlDocDump'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='io1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlDocDumpFormatMemory'>
|
||||
<ref filename='io2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlDocGetRootElement'>
|
||||
<ref filename='tree1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlDocPtr'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='parse3.c'/>
|
||||
<ref filename='xpath2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlDocSetRootElement'>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlFindCharEncodingHandler'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlFree'>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlFreeDoc'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='parse3.c'/>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlFreeParserCtxt'>
|
||||
<ref filename='parse4.c'/>
|
||||
<ref filename='parse2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlFreeTextReader'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlFreeTextWriter'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlInitParser'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlMalloc'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlMemoryDump'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='parse3.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewChild'>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewDoc'>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewDocNode'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewNode'>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewParserCtxt'>
|
||||
<ref filename='parse2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewProp'>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewText'>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewTextWriterDoc'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewTextWriterFilename'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewTextWriterMemory'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNewTextWriterTree'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNodePtr'>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='testWriter.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNodeSetContent'>
|
||||
<ref filename='io2.c'/>
|
||||
<ref filename='xpath2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlNsPtr'>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlParseChunk'>
|
||||
<ref filename='parse4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlParseFile'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlParserCtxtPtr'>
|
||||
<ref filename='parse4.c'/>
|
||||
<ref filename='parse2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlReadFile'>
|
||||
<ref filename='tree1.c'/>
|
||||
<ref filename='parse1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlReadMemory'>
|
||||
<ref filename='parse3.c'/>
|
||||
<ref filename='io1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlReaderForFile'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlReaderNewFile'>
|
||||
<ref filename='reader4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlRealloc'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlRegisterInputCallbacks'>
|
||||
<ref filename='io1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlSaveFileEnc'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlSaveFormatFileEnc'>
|
||||
<ref filename='tree2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlStrchr'>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlStrdup'>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlStrlen'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderConstName'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderConstValue'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderCurrentDoc'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderDepth'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderHasValue'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderIsEmptyElement'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderIsValid'>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderNodeType'>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderPreservePattern'>
|
||||
<ref filename='reader3.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderPtr'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextReaderRead'>
|
||||
<ref filename='reader3.c'/>
|
||||
<ref filename='reader1.c'/>
|
||||
<ref filename='reader2.c'/>
|
||||
<ref filename='reader4.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterEndDocument'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterEndElement'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterPtr'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterStartDocument'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterStartElement'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterWriteAttribute'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterWriteComment'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterWriteElement'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterWriteFormatComment'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlTextWriterWriteFormatElement'>
|
||||
<ref filename='testWriter.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXIncludeProcess'>
|
||||
<ref filename='io1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathContextPtr'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathEvalExpression'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathFreeContext'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathFreeObject'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathNewContext'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathObjectPtr'>
|
||||
<ref filename='xpath2.c'/>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
<symbol name='xmlXPathRegisterNs'>
|
||||
<ref filename='xpath1.c'/>
|
||||
</symbol>
|
||||
</symbols>
|
||||
<sections>
|
||||
<section name='InputOutput'>
|
||||
<example filename='io2.c'/>
|
||||
<example filename='io1.c'/>
|
||||
</section>
|
||||
<section name='Parsing'>
|
||||
<example filename='parse3.c'/>
|
||||
<example filename='parse1.c'/>
|
||||
<example filename='parse4.c'/>
|
||||
<example filename='parse2.c'/>
|
||||
</section>
|
||||
<section name='Tree'>
|
||||
<example filename='tree2.c'/>
|
||||
<example filename='tree1.c'/>
|
||||
</section>
|
||||
<section name='XPath'>
|
||||
<example filename='xpath2.c'/>
|
||||
<example filename='xpath1.c'/>
|
||||
</section>
|
||||
<section name='xmlReader'>
|
||||
<example filename='reader3.c'/>
|
||||
<example filename='reader1.c'/>
|
||||
<example filename='reader2.c'/>
|
||||
<example filename='reader4.c'/>
|
||||
</section>
|
||||
<section name='xmlWriter'>
|
||||
<example filename='testWriter.c'/>
|
||||
</section>
|
||||
</sections>
|
||||
</examples>
|
||||
@@ -1,174 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<xsl:stylesheet version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:exsl="http://exslt.org/common"
|
||||
extension-element-prefixes="exsl"
|
||||
exclude-result-prefixes="exsl">
|
||||
|
||||
<xsl:import href="../site.xsl"/>
|
||||
|
||||
<xsl:variable name="href_base">../</xsl:variable>
|
||||
<xsl:variable name="menu_name">Examples Menu</xsl:variable>
|
||||
|
||||
<xsl:variable name="toc">
|
||||
<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><!-- style="margin-left: -1em" -->
|
||||
<li><a href="{$href_base}index.html">Home</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}docs.html">Developer Menu</a></li>
|
||||
<li><a style="font-weight:bold"
|
||||
href="{$href_base}html/index.html">API Menu</a></li>
|
||||
<xsl:for-each select="/examples/sections/section">
|
||||
<li><a href="#{@name}"><xsl:value-of select="@name"/> Examples</a></li>
|
||||
</xsl:for-each>
|
||||
<li><a href="{$href_base}guidelines.html">XML Guidelines</a></li>
|
||||
</ul>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:template match="include">
|
||||
<xsl:variable name="header" select="substring-before(substring-after(., '/'), '>')"/>
|
||||
<xsl:variable name="doc" select="concat('../html/libxml-', $header, 'tml')"/>
|
||||
<li><a href="{$doc}"><xsl:value-of select="."/></a></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="typedef">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="header" select="concat(@file, '.h')"/>
|
||||
<xsl:variable name="doc" select="concat('../html/libxml-', @file, '.html#', $name)"/>
|
||||
<li> line <xsl:value-of select="@line"/>: Type <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="function">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="header" select="concat(@file, '.h')"/>
|
||||
<xsl:variable name="doc" select="concat('../html/libxml-', @file, '.html#', $name)"/>
|
||||
<li> line <xsl:value-of select="@line"/>: Function <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="macro">
|
||||
<xsl:variable name="name" select="@name"/>
|
||||
<xsl:variable name="header" select="concat(@file, '.h')"/>
|
||||
<xsl:variable name="doc" select="concat('../html/libxml-', @file, '.html#', $name)"/>
|
||||
<li> line <xsl:value-of select="@line"/>: Macro <a href="{$doc}"><xsl:value-of select="$name"/></a> from <xsl:value-of select="$header"/></li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="example">
|
||||
<xsl:variable name="filename" select="string(@filename)"/>
|
||||
<h3><a name="{$filename}" href="{$filename}"><xsl:value-of select="$filename"/></a>: <xsl:value-of select="synopsis"/></h3>
|
||||
<p><xsl:value-of select="purpose"/></p>
|
||||
<p>Includes:</p>
|
||||
<ul>
|
||||
<xsl:for-each select="includes/include">
|
||||
<xsl:apply-templates select='.'/>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
<p>Uses:</p>
|
||||
<ul>
|
||||
<xsl:for-each select="uses/*">
|
||||
<xsl:sort select="@line" data-type="number"/>
|
||||
<xsl:apply-templates select='.'/>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
<p>Usage:</p>
|
||||
<p><xsl:value-of select="usage"/></p>
|
||||
<p>Author: <xsl:value-of select="author"/></p>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="section">
|
||||
<li><p> <a href="#{@name}"><xsl:value-of select="@name"/></a> :</p>
|
||||
<ul>
|
||||
<xsl:for-each select="example">
|
||||
<xsl:sort select='.'/>
|
||||
<xsl:variable name="filename" select="@filename"/>
|
||||
<li> <a href="#{$filename}"><xsl:value-of select="$filename"/></a>: <xsl:value-of select="/examples/example[@filename = $filename]/synopsis"/></li>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
</li>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="sections">
|
||||
<p> The examples are stored per section depending on the main focus
|
||||
of the example:</p>
|
||||
<ul>
|
||||
<xsl:for-each select="section">
|
||||
<xsl:sort select='.'/>
|
||||
<xsl:apply-templates select='.'/>
|
||||
</xsl:for-each>
|
||||
</ul>
|
||||
<p> Getting the compilation options and libraries dependancies needed
|
||||
to generate binaries from the examples is best done on Linux/Unix by using
|
||||
the xml2-config script which should have been installed as part of <i>make
|
||||
install</i> step or when installing the libxml2 development package:</p>
|
||||
<pre>gcc -o example `xml2-config --cflags` example.c `xml2-config --libs`</pre>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="sections-list">
|
||||
<xsl:for-each select="sections/section">
|
||||
<xsl:variable name="section" select="@name"/>
|
||||
<h2> <a name="{$section}"></a><xsl:value-of select="$section"/> Examples</h2>
|
||||
<xsl:apply-templates select='/examples/example[section = $section]'/>
|
||||
</xsl:for-each>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="examples">
|
||||
<xsl:variable name="title">Libxml2 set of examples</xsl:variable>
|
||||
<xsl:document href="index.html" method="xml" encoding="ISO-8859-1"
|
||||
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<xsl:call-template name="style"/>
|
||||
<xsl:element name="title">
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:element>
|
||||
</head>
|
||||
<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
|
||||
<xsl:call-template name="titlebox">
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
</xsl:call-template>
|
||||
<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">
|
||||
<xsl:call-template name="toc"/>
|
||||
</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">
|
||||
<xsl:apply-templates select="sections"/>
|
||||
<xsl:call-template name="sections-list"/>
|
||||
<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>
|
||||
</xsl:document>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
@@ -1,298 +0,0 @@
|
||||
#!/usr/bin/python -u
|
||||
#
|
||||
# Indexes the examples and build an XML description
|
||||
#
|
||||
import string
|
||||
import glob
|
||||
import sys
|
||||
try:
|
||||
import libxml2
|
||||
except:
|
||||
sys.exit(1)
|
||||
sys.path.insert(0, "..")
|
||||
from apibuild import CParser, escape
|
||||
|
||||
examples = []
|
||||
extras = ['examples.xsl', 'index.py']
|
||||
tests = []
|
||||
sections = {}
|
||||
symbols = {}
|
||||
api_dict = None
|
||||
api_doc = None
|
||||
|
||||
def load_api():
|
||||
global api_dict
|
||||
global api_doc
|
||||
|
||||
if api_dict != None:
|
||||
return
|
||||
api_dict = {}
|
||||
try:
|
||||
print "loading ../libxml2-api.xml"
|
||||
api_doc = libxml2.parseFile("../libxml2-api.xml")
|
||||
except:
|
||||
print "failed to parse ../libxml2-api.xml"
|
||||
sys.exit(1)
|
||||
|
||||
def find_symbol(name):
|
||||
global api_dict
|
||||
global api_doc
|
||||
|
||||
if api_doc == None:
|
||||
load_api()
|
||||
|
||||
if name == None:
|
||||
return
|
||||
if api_dict.has_key(name):
|
||||
return api_dict[name]
|
||||
ctxt = api_doc.xpathNewContext()
|
||||
res = ctxt.xpathEval("/api/symbols/*[@name = '%s']" % (name))
|
||||
if type(res) == type([]) and len(res) >= 1:
|
||||
if len(res) > 1:
|
||||
print "Found %d references to %s in the API" % (len(res), name)
|
||||
node = res[0]
|
||||
typ = node.name
|
||||
file = node.xpathEval("string(@file)")
|
||||
info = node.xpathEval("string(info)")
|
||||
else:
|
||||
print "Reference %s not found in the API" % (name)
|
||||
return None
|
||||
ret = (typ, file, info)
|
||||
api_dict[name] = ret
|
||||
return ret
|
||||
|
||||
def parse_top_comment(filename, comment):
|
||||
res = {}
|
||||
lines = string.split(comment, "\n")
|
||||
item = None
|
||||
for line in lines:
|
||||
while line != "" and (line[0] == ' ' or line[0] == '\t'):
|
||||
line = line[1:]
|
||||
while line != "" and line[0] == '*':
|
||||
line = line[1:]
|
||||
while line != "" and (line[0] == ' ' or line[0] == '\t'):
|
||||
line = line[1:]
|
||||
try:
|
||||
(it, line) = string.split(line, ":", 1)
|
||||
item = it
|
||||
while line != "" and (line[0] == ' ' or line[0] == '\t'):
|
||||
line = line[1:]
|
||||
if res.has_key(item):
|
||||
res[item] = res[item] + " " + line
|
||||
else:
|
||||
res[item] = line
|
||||
except:
|
||||
if item != None:
|
||||
if res.has_key(item):
|
||||
res[item] = res[item] + " " + line
|
||||
else:
|
||||
res[item] = line
|
||||
return res
|
||||
|
||||
def parse(filename, output):
|
||||
global symbols
|
||||
global sections
|
||||
|
||||
parser = CParser(filename)
|
||||
parser.collect_references()
|
||||
idx = parser.parse()
|
||||
info = parse_top_comment(filename, parser.top_comment)
|
||||
output.write(" <example filename='%s'>\n" % filename)
|
||||
try:
|
||||
synopsis = info['synopsis']
|
||||
output.write(" <synopsis>%s</synopsis>\n" % escape(synopsis));
|
||||
except:
|
||||
print "Example %s lacks a synopsis description" % (filename)
|
||||
try:
|
||||
purpose = info['purpose']
|
||||
output.write(" <purpose>%s</purpose>\n" % escape(purpose));
|
||||
except:
|
||||
print "Example %s lacks a purpose description" % (filename)
|
||||
try:
|
||||
usage = info['usage']
|
||||
output.write(" <usage>%s</usage>\n" % escape(usage));
|
||||
except:
|
||||
print "Example %s lacks an usage description" % (filename)
|
||||
try:
|
||||
test = info['test']
|
||||
output.write(" <test>%s</test>\n" % escape(test));
|
||||
progname=filename[0:-2]
|
||||
command=string.replace(test, progname, './' + progname, 1)
|
||||
tests.append(command)
|
||||
except:
|
||||
pass
|
||||
try:
|
||||
author = info['author']
|
||||
output.write(" <author>%s</author>\n" % escape(author));
|
||||
except:
|
||||
print "Example %s lacks an author description" % (filename)
|
||||
try:
|
||||
copy = info['copy']
|
||||
output.write(" <copy>%s</copy>\n" % escape(copy));
|
||||
except:
|
||||
print "Example %s lacks a copyright description" % (filename)
|
||||
try:
|
||||
section = info['section']
|
||||
output.write(" <section>%s</section>\n" % escape(section));
|
||||
if sections.has_key(section):
|
||||
sections[section].append(filename)
|
||||
else:
|
||||
sections[section] = [filename]
|
||||
except:
|
||||
print "Example %s lacks a section description" % (filename)
|
||||
for topic in info.keys():
|
||||
if topic != "purpose" and topic != "usage" and \
|
||||
topic != "author" and topic != "copy" and \
|
||||
topic != "section" and topic != "synopsis" and topic != "test":
|
||||
str = info[topic]
|
||||
output.write(" <extra topic='%s'>%s</extra>\n" % (
|
||||
escape(topic), escape(str)))
|
||||
output.write(" <includes>\n")
|
||||
for include in idx.includes.keys():
|
||||
if include.find("libxml") != -1:
|
||||
output.write(" <include>%s</include>\n" % (escape(include)))
|
||||
output.write(" </includes>\n")
|
||||
output.write(" <uses>\n")
|
||||
for ref in idx.references.keys():
|
||||
id = idx.references[ref]
|
||||
name = id.get_name()
|
||||
line = id.get_lineno()
|
||||
if symbols.has_key(name):
|
||||
sinfo = symbols[name]
|
||||
refs = sinfo[0]
|
||||
# gather at most 5 references per symbols
|
||||
if refs > 5:
|
||||
continue
|
||||
sinfo.append(filename)
|
||||
sinfo[0] = refs + 1
|
||||
else:
|
||||
symbols[name] = [1, filename]
|
||||
info = find_symbol(name)
|
||||
if info != None:
|
||||
type = info[0]
|
||||
file = info[1]
|
||||
output.write(" <%s line='%d' file='%s' name='%s'/>\n" % (type,
|
||||
line, file, name))
|
||||
else:
|
||||
type = id.get_type()
|
||||
output.write(" <%s line='%d' name='%s'/>\n" % (type,
|
||||
line, name))
|
||||
|
||||
output.write(" </uses>\n")
|
||||
output.write(" </example>\n")
|
||||
|
||||
return idx
|
||||
|
||||
def dump_symbols(output):
|
||||
global symbols
|
||||
|
||||
output.write(" <symbols>\n")
|
||||
keys = symbols.keys()
|
||||
keys.sort()
|
||||
for symbol in keys:
|
||||
output.write(" <symbol name='%s'>\n" % (symbol))
|
||||
info = symbols[symbol]
|
||||
i = 1
|
||||
while i < len(info):
|
||||
output.write(" <ref filename='%s'/>\n" % (info[i]))
|
||||
i = i + 1
|
||||
output.write(" </symbol>\n")
|
||||
output.write(" </symbols>\n")
|
||||
|
||||
def dump_sections(output):
|
||||
global sections
|
||||
|
||||
output.write(" <sections>\n")
|
||||
keys = sections.keys()
|
||||
keys.sort()
|
||||
for section in keys:
|
||||
output.write(" <section name='%s'>\n" % (section))
|
||||
info = sections[section]
|
||||
i = 0
|
||||
while i < len(info):
|
||||
output.write(" <example filename='%s'/>\n" % (info[i]))
|
||||
i = i + 1
|
||||
output.write(" </section>\n")
|
||||
output.write(" </sections>\n")
|
||||
|
||||
def dump_Makefile():
|
||||
for file in glob.glob('*.xml'):
|
||||
extras.append(file)
|
||||
for file in glob.glob('*.res'):
|
||||
extras.append(file)
|
||||
Makefile="""# Beware this is autogenerated by index.py
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I@srcdir@/include @THREAD_CFLAGS@ @Z_CFLAGS@
|
||||
DEPS = $(top_builddir)/libxml2.la
|
||||
LDADDS = @STATIC_BINARIES@ $(top_builddir)/libxml2.la @THREAD_LIBS@ @Z_LIBS@ $(ICONV_LIBS) -lm @WIN32_EXTRA_LIBADD@
|
||||
|
||||
rebuild: examples.xml index.html
|
||||
|
||||
examples.xml: index.py *.c
|
||||
-@($(srcdir)/index.py)
|
||||
|
||||
index.html: examples.xml examples.xsl
|
||||
-@(xsltproc examples.xsl examples.xml && echo "Rebuilt web page" && xmllint --valid --noout index.html)
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
-@INSTALL@ -m 0644 $(srcdir)/*.html $(srcdir)/*.c $(srcdir)/*.xml $(srcdir)/*.xsl $(srcdir)/*.res $(DESTDIR)$(HTML_DIR)
|
||||
|
||||
"""
|
||||
EXTRA_DIST=""
|
||||
for extra in extras:
|
||||
EXTRA_DIST = EXTRA_DIST + extra + " "
|
||||
Makefile = Makefile + "EXTRA_DIST=%s\n\n" % (EXTRA_DIST)
|
||||
noinst_PROGRAMS=""
|
||||
for example in examples:
|
||||
noinst_PROGRAMS = noinst_PROGRAMS + example + " "
|
||||
Makefile = Makefile + "noinst_PROGRAMS=%s\n\n" % (noinst_PROGRAMS)
|
||||
for example in examples:
|
||||
Makefile = Makefile + "%s_SOURCES=%s.c\n%s_LDFLAGS=\n%s_DEPENDENCIES= $(DEPS)\n%s_LDADD= @RDL_LIBS@ $(LDADDS)\n\n" % (example, example, example,
|
||||
example, example)
|
||||
Makefile = Makefile + "valgrind: \n\t$(MAKE) CHECKER='valgrind' tests\n\n"
|
||||
Makefile = Makefile + "tests: $(noinst_PROGRAMS)\n"
|
||||
Makefile = Makefile + "\t@(echo '## examples regression tests')\n"
|
||||
Makefile = Makefile + "\t@(echo > .memdump)\n"
|
||||
for test in tests:
|
||||
Makefile = Makefile + "\t@($(CHECKER) %s)\n" % (test)
|
||||
Makefile = Makefile + '\t@(grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0" ; exit 0)\n'
|
||||
Makefile = Makefile + "\n\n"
|
||||
try:
|
||||
old = open("Makefile.am", "r").read()
|
||||
if old != Makefile:
|
||||
n = open("Makefile.am", "w").write(Makefile)
|
||||
print "Updated Makefile.am"
|
||||
except:
|
||||
print "Failed to read or save Makefile.am"
|
||||
#
|
||||
# Autogenerate the .cvsignore too ...
|
||||
#
|
||||
ignore = """.memdump
|
||||
Makefile.in
|
||||
Makefile
|
||||
"""
|
||||
for example in examples:
|
||||
ignore = ignore + "%s\n" % (example)
|
||||
try:
|
||||
old = open(".cvsignore", "r").read()
|
||||
if old != ignore:
|
||||
n = open(".cvsignore", "w").write(ignore)
|
||||
print "Updated .cvsignore"
|
||||
except:
|
||||
print "Failed to read or save .cvsignore"
|
||||
|
||||
if __name__ == "__main__":
|
||||
load_api()
|
||||
output = open("examples.xml", "w")
|
||||
output.write("<examples>\n")
|
||||
|
||||
for file in glob.glob('*.c'):
|
||||
parse(file, output)
|
||||
examples.append(file[:-2])
|
||||
|
||||
dump_symbols(output)
|
||||
dump_sections(output)
|
||||
output.write("</examples>\n")
|
||||
output.close()
|
||||
dump_Makefile()
|
||||
|
||||
@@ -1,166 +0,0 @@
|
||||
/**
|
||||
* section: InputOutput
|
||||
* synopsis: Example of custom Input/Output
|
||||
* purpose: Demonstrate the use of xmlRegisterInputCallbacks
|
||||
* to build a custom I/O layer, this is used in an
|
||||
* XInclude method context to show how dynamic document can
|
||||
* be built in a clean way.
|
||||
* usage: io1
|
||||
* test: io1 > io1.tmp ; diff io1.tmp io1.res ; rm -f io1.tmp
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/xinclude.h>
|
||||
#include <libxml/xmlIO.h>
|
||||
|
||||
#ifdef LIBXML_XINCLUDE_ENABLED
|
||||
static const char *result = "<list><people>a</people><people>b</people></list>";
|
||||
static const char *cur = NULL;
|
||||
static int rlen;
|
||||
|
||||
/**
|
||||
* sqlMatch:
|
||||
* @URI: an URI to test
|
||||
*
|
||||
* Check for an sql: query
|
||||
*
|
||||
* Returns 1 if yes and 0 if another Input module should be used
|
||||
*/
|
||||
static int
|
||||
sqlMatch(const char * URI) {
|
||||
if ((URI != NULL) && (!strncmp(URI, "sql:", 4)))
|
||||
return(1);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* sqlOpen:
|
||||
* @URI: an URI to test
|
||||
*
|
||||
* Return a pointer to the sql: query handler, in this example simply
|
||||
* the current pointer...
|
||||
*
|
||||
* Returns an Input context or NULL in case or error
|
||||
*/
|
||||
static void *
|
||||
sqlOpen(const char * URI) {
|
||||
if ((URI == NULL) || (strncmp(URI, "sql:", 4)))
|
||||
return(NULL);
|
||||
cur = result;
|
||||
rlen = strlen(result);
|
||||
return((void *) cur);
|
||||
}
|
||||
|
||||
/**
|
||||
* sqlClose:
|
||||
* @context: the read context
|
||||
*
|
||||
* Close the sql: query handler
|
||||
*
|
||||
* Returns 0 or -1 in case of error
|
||||
*/
|
||||
static int
|
||||
sqlClose(void * context) {
|
||||
if (context == NULL) return(-1);
|
||||
cur = NULL;
|
||||
rlen = 0;
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* sqlRead:
|
||||
* @context: the read context
|
||||
* @buffer: where to store data
|
||||
* @len: number of bytes to read
|
||||
*
|
||||
* Implement an sql: query read.
|
||||
*
|
||||
* Returns the number of bytes read or -1 in case of error
|
||||
*/
|
||||
static int
|
||||
sqlRead(void * context, char * buffer, int len) {
|
||||
const char *ptr = (const char *) context;
|
||||
|
||||
if ((context == NULL) || (buffer == NULL) || (len < 0))
|
||||
return(-1);
|
||||
|
||||
if (len > rlen) len = rlen;
|
||||
memcpy(buffer, ptr, len);
|
||||
rlen -= len;
|
||||
return(len);
|
||||
}
|
||||
|
||||
const char *include = "<?xml version='1.0'?>\n\
|
||||
<document xmlns:xi=\"http://www.w3.org/2003/XInclude\">\n\
|
||||
<p>List of people:</p>\n\
|
||||
<xi:include href=\"sql:select_name_from_people\"/>\n\
|
||||
</document>\n";
|
||||
|
||||
int main(void) {
|
||||
xmlDocPtr doc;
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
/*
|
||||
* register the new I/O handlers
|
||||
*/
|
||||
if (xmlRegisterInputCallbacks(sqlMatch, sqlOpen, sqlRead, sqlClose) < 0) {
|
||||
fprintf(stderr, "failed to register SQL handler\n");
|
||||
exit(1);
|
||||
}
|
||||
/*
|
||||
* parse include into a document
|
||||
*/
|
||||
doc = xmlReadMemory(include, strlen(include), "include.xml", NULL, 0);
|
||||
if (doc == NULL) {
|
||||
fprintf(stderr, "failed to parse the including file\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
* apply the XInclude process, this should trigger the I/O just
|
||||
* registered.
|
||||
*/
|
||||
if (xmlXIncludeProcess(doc) <= 0) {
|
||||
fprintf(stderr, "XInclude processing failed\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
#ifdef LIBXML_OUTPUT_ENABLED
|
||||
/*
|
||||
* save the output for checking to stdout
|
||||
*/
|
||||
xmlDocDump(stdout, doc);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Free the document
|
||||
*/
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "XInclude support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<document xmlns:xi="http://www.w3.org/2003/XInclude">
|
||||
<p>List of people:</p>
|
||||
<list><people>a</people><people>b</people></list>
|
||||
</document>
|
||||
@@ -1,58 +0,0 @@
|
||||
/**
|
||||
* section: InputOutput
|
||||
* synopsis: Output to char buffer
|
||||
* purpose: Demonstrate the use of xmlDocDumpMemory
|
||||
* to output document to a character buffer
|
||||
* usage: io2
|
||||
* test: io2 > io2.tmp ; diff io2.tmp io2.res ; rm -f io2.tmp
|
||||
* author: John Fleck
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <libxml/parser.h>
|
||||
|
||||
#if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
|
||||
xmlNodePtr n;
|
||||
xmlDocPtr doc;
|
||||
xmlChar *xmlbuff;
|
||||
int buffersize;
|
||||
|
||||
/*
|
||||
* Create the document.
|
||||
*/
|
||||
doc = xmlNewDoc(BAD_CAST "1.0");
|
||||
n = xmlNewNode(NULL, BAD_CAST "root");
|
||||
xmlNodeSetContent(n, BAD_CAST "content");
|
||||
xmlDocSetRootElement(doc, n);
|
||||
|
||||
/*
|
||||
* Dump the document to a buffer and print it
|
||||
* for demonstration purposes.
|
||||
*/
|
||||
xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);
|
||||
printf((char *) xmlbuff);
|
||||
|
||||
/*
|
||||
* Free associated memory.
|
||||
*/
|
||||
xmlFree(xmlbuff);
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
return (0);
|
||||
|
||||
}
|
||||
#else
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"library not configured with tree and output support\n");
|
||||
return (1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<root>content</root>
|
||||
@@ -1,56 +0,0 @@
|
||||
/**
|
||||
* section: Parsing
|
||||
* synopsis: Parse an XML file to a tree and free it
|
||||
* purpose: Demonstrate the use of xmlReadFile() to read an XML file
|
||||
* into a tree and and xmlFreeDoc() to free the resulting tree
|
||||
* usage: parse1 test1.xml
|
||||
* test: parse1 test1.xml
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
/**
|
||||
* example1Func:
|
||||
* @filename: a filename or an URL
|
||||
*
|
||||
* Parse the resource and free the resulting tree
|
||||
*/
|
||||
static void
|
||||
example1Func(const char *filename) {
|
||||
xmlDocPtr doc; /* the resulting document tree */
|
||||
|
||||
doc = xmlReadFile(filename, NULL, 0);
|
||||
if (doc == NULL) {
|
||||
fprintf(stderr, "Failed to parse %s\n", filename);
|
||||
return;
|
||||
}
|
||||
xmlFreeDoc(doc);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
example1Func(argv[1]);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
@@ -1,72 +0,0 @@
|
||||
/**
|
||||
* section: Parsing
|
||||
* synopsis: Parse and validate an XML file to a tree and free the result
|
||||
* purpose: Create a parser context for an XML file, then parse and validate
|
||||
* the file, creating a tree, check the validation result
|
||||
* and xmlFreeDoc() to free the resulting tree.
|
||||
* usage: parse2 test2.xml
|
||||
* test: parse2 test2.xml
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
/**
|
||||
* exampleFunc:
|
||||
* @filename: a filename or an URL
|
||||
*
|
||||
* Parse and validate the resource and free the resulting tree
|
||||
*/
|
||||
static void
|
||||
exampleFunc(const char *filename) {
|
||||
xmlParserCtxtPtr ctxt; /* the parser context */
|
||||
xmlDocPtr doc; /* the resulting document tree */
|
||||
|
||||
/* create a parser context */
|
||||
ctxt = xmlNewParserCtxt();
|
||||
if (ctxt == NULL) {
|
||||
fprintf(stderr, "Failed to allocate parser context\n");
|
||||
return;
|
||||
}
|
||||
/* parse the file, activating the DTD validation option */
|
||||
doc = xmlCtxtReadFile(ctxt, filename, NULL, XML_PARSE_DTDVALID);
|
||||
/* check if parsing suceeded */
|
||||
if (doc == NULL) {
|
||||
fprintf(stderr, "Failed to parse %s\n", filename);
|
||||
} else {
|
||||
/* check if validation suceeded */
|
||||
if (ctxt->valid == 0)
|
||||
fprintf(stderr, "Failed to validate %s\n", filename);
|
||||
/* free up the resulting document */
|
||||
xmlFreeDoc(doc);
|
||||
}
|
||||
/* free up the parser context */
|
||||
xmlFreeParserCtxt(ctxt);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
exampleFunc(argv[1]);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
@@ -1,60 +0,0 @@
|
||||
/**
|
||||
* section: Parsing
|
||||
* synopsis: Parse an XML document in memory to a tree and free it
|
||||
* purpose: Demonstrate the use of xmlReadMemory() to read an XML file
|
||||
* into a tree and and xmlFreeDoc() to free the resulting tree
|
||||
* usage: parse3
|
||||
* test: parse3
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
static const char *document = "<doc/>";
|
||||
|
||||
/**
|
||||
* example3Func:
|
||||
* @content: the content of the document
|
||||
* @length: the length in bytes
|
||||
*
|
||||
* Parse the in memory document and free the resulting tree
|
||||
*/
|
||||
static void
|
||||
example3Func(const char *content, int length) {
|
||||
xmlDocPtr doc; /* the resulting document tree */
|
||||
|
||||
/*
|
||||
* The document being in memory, it have no base per RFC 2396,
|
||||
* and the "noname.xml" argument will serve as its base.
|
||||
*/
|
||||
doc = xmlReadMemory(content, length, "noname.xml", NULL, 0);
|
||||
if (doc == NULL) {
|
||||
fprintf(stderr, "Failed to parse document\n");
|
||||
return;
|
||||
}
|
||||
xmlFreeDoc(doc);
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
example3Func(document, 6);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
@@ -1,143 +0,0 @@
|
||||
/**
|
||||
* section: Parsing
|
||||
* synopsis: Parse an XML document chunk by chunk to a tree and free it
|
||||
* purpose: Demonstrate the use of xmlCreatePushParserCtxt() and
|
||||
* xmlParseChunk() to read an XML file progressively
|
||||
* into a tree and and xmlFreeDoc() to free the resulting tree
|
||||
* usage: parse4 test3.xml
|
||||
* test: parse4 test3.xml
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
#ifdef LIBXML_PUSH_ENABLED
|
||||
static FILE *desc;
|
||||
|
||||
/**
|
||||
* readPacket:
|
||||
* @mem: array to store the packet
|
||||
* @size: the packet size
|
||||
*
|
||||
* read at most @size bytes from the document and store it in @mem
|
||||
*
|
||||
* Returns the number of bytes read
|
||||
*/
|
||||
static int
|
||||
readPacket(char *mem, int size) {
|
||||
int res;
|
||||
|
||||
res = fread(mem, 1, size, desc);
|
||||
return(res);
|
||||
}
|
||||
|
||||
/**
|
||||
* example4Func:
|
||||
* @filename: a filename or an URL
|
||||
*
|
||||
* Parse the resource and free the resulting tree
|
||||
*/
|
||||
static void
|
||||
example4Func(const char *filename) {
|
||||
xmlParserCtxtPtr ctxt;
|
||||
char chars[4];
|
||||
xmlDocPtr doc; /* the resulting document tree */
|
||||
int res;
|
||||
|
||||
/*
|
||||
* Read a few first byte to check the input used for the
|
||||
* encoding detection at the parser level.
|
||||
*/
|
||||
res = readPacket(chars, 4);
|
||||
if (res <= 0) {
|
||||
fprintf(stderr, "Failed to parse %s\n", filename);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a progressive parsing context, the 2 first arguments
|
||||
* are not used since we want to build a tree and not use a SAX
|
||||
* parsing interface. We also pass the first bytes of the document
|
||||
* to allow encoding detection when creating the parser but this
|
||||
* is optional.
|
||||
*/
|
||||
ctxt = xmlCreatePushParserCtxt(NULL, NULL,
|
||||
chars, res, filename);
|
||||
if (ctxt == NULL) {
|
||||
fprintf(stderr, "Failed to create parser context !\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* loop on the input getting the document data, of course 4 bytes
|
||||
* at a time is not realistic but allows to verify testing on small
|
||||
* documents.
|
||||
*/
|
||||
while ((res = readPacket(chars, 4)) > 0) {
|
||||
xmlParseChunk(ctxt, chars, res, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* there is no more input, indicate the parsing is finished.
|
||||
*/
|
||||
xmlParseChunk(ctxt, chars, 0, 1);
|
||||
|
||||
/*
|
||||
* collect the document back and if it was wellformed
|
||||
* and destroy the parser context.
|
||||
*/
|
||||
doc = ctxt->myDoc;
|
||||
res = ctxt->wellFormed;
|
||||
xmlFreeParserCtxt(ctxt);
|
||||
|
||||
if (!res) {
|
||||
fprintf(stderr, "Failed to parse %s\n", filename);
|
||||
}
|
||||
|
||||
/*
|
||||
* since we don't use the document, destroy it now.
|
||||
*/
|
||||
xmlFreeDoc(doc);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
/*
|
||||
* simulate a progressive parsing using the input file.
|
||||
*/
|
||||
desc = fopen(argv[1], "rb");
|
||||
if (desc != NULL) {
|
||||
example4Func(argv[1]);
|
||||
fclose(desc);
|
||||
} else {
|
||||
fprintf(stderr, "Failed to parse %s\n", argv[1]);
|
||||
}
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
#else /* ! LIBXML_PUSH_ENABLED */
|
||||
int main(int argc, char **argv) {
|
||||
fprintf(stderr, "Library not compiled with push parser support\n");
|
||||
return(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,107 +0,0 @@
|
||||
/**
|
||||
* section: xmlReader
|
||||
* synopsis: Parse an XML file with an xmlReader
|
||||
* purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
|
||||
* and dump the informations about the nodes found in the process.
|
||||
* (Note that the XMLReader functions require libxml2 version later
|
||||
* than 2.6.)
|
||||
* usage: reader1 <filename>
|
||||
* test: reader1 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/xmlreader.h>
|
||||
|
||||
#ifdef LIBXML_READER_ENABLED
|
||||
|
||||
/**
|
||||
* processNode:
|
||||
* @reader: the xmlReader
|
||||
*
|
||||
* Dump information about the current node
|
||||
*/
|
||||
static void
|
||||
processNode(xmlTextReaderPtr reader) {
|
||||
const xmlChar *name, *value;
|
||||
|
||||
name = xmlTextReaderConstName(reader);
|
||||
if (name == NULL)
|
||||
name = BAD_CAST "--";
|
||||
|
||||
value = xmlTextReaderConstValue(reader);
|
||||
|
||||
printf("%d %d %s %d %d",
|
||||
xmlTextReaderDepth(reader),
|
||||
xmlTextReaderNodeType(reader),
|
||||
name,
|
||||
xmlTextReaderIsEmptyElement(reader),
|
||||
xmlTextReaderHasValue(reader));
|
||||
if (value == NULL)
|
||||
printf("\n");
|
||||
else {
|
||||
if (xmlStrlen(value) > 40)
|
||||
printf(" %.40s...\n", value);
|
||||
else
|
||||
printf(" %s\n", value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* streamFile:
|
||||
* @filename: the file name to parse
|
||||
*
|
||||
* Parse and print information about an XML file.
|
||||
*/
|
||||
static void
|
||||
streamFile(const char *filename) {
|
||||
xmlTextReaderPtr reader;
|
||||
int ret;
|
||||
|
||||
reader = xmlReaderForFile(filename, NULL, 0);
|
||||
if (reader != NULL) {
|
||||
ret = xmlTextReaderRead(reader);
|
||||
while (ret == 1) {
|
||||
processNode(reader);
|
||||
ret = xmlTextReaderRead(reader);
|
||||
}
|
||||
xmlFreeTextReader(reader);
|
||||
if (ret != 0) {
|
||||
fprintf(stderr, "%s : failed to parse\n", filename);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Unable to open %s\n", filename);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
streamFile(argv[1]);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "XInclude support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,14 +0,0 @@
|
||||
0 10 doc 0 0
|
||||
0 1 doc 0 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 src 1 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 dest 1 0
|
||||
1 14 #text 0 1
|
||||
|
||||
1 1 src 1 0
|
||||
1 14 #text 0 1
|
||||
|
||||
0 15 doc 0 0
|
||||
@@ -1,122 +0,0 @@
|
||||
/**
|
||||
* section: xmlReader
|
||||
* synopsis: Parse and validate an XML file with an xmlReader
|
||||
* purpose: Demonstrate the use of xmlReaderForFile() to parse an XML file
|
||||
* validating the content in the process and activating options
|
||||
* like entities substitution, and DTD attributes defaulting.
|
||||
* (Note that the XMLReader functions require libxml2 version later
|
||||
* than 2.6.)
|
||||
* usage: reader2 <valid_xml_filename>
|
||||
* test: reader2 test2.xml > reader1.tmp ; diff reader1.tmp reader1.res ; rm reader1.tmp
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/xmlreader.h>
|
||||
|
||||
#ifdef LIBXML_READER_ENABLED
|
||||
|
||||
/**
|
||||
* processNode:
|
||||
* @reader: the xmlReader
|
||||
*
|
||||
* Dump information about the current node
|
||||
*/
|
||||
static void
|
||||
processNode(xmlTextReaderPtr reader) {
|
||||
const xmlChar *name, *value;
|
||||
|
||||
name = xmlTextReaderConstName(reader);
|
||||
if (name == NULL)
|
||||
name = BAD_CAST "--";
|
||||
|
||||
value = xmlTextReaderConstValue(reader);
|
||||
|
||||
printf("%d %d %s %d %d",
|
||||
xmlTextReaderDepth(reader),
|
||||
xmlTextReaderNodeType(reader),
|
||||
name,
|
||||
xmlTextReaderIsEmptyElement(reader),
|
||||
xmlTextReaderHasValue(reader));
|
||||
if (value == NULL)
|
||||
printf("\n");
|
||||
else {
|
||||
if (xmlStrlen(value) > 40)
|
||||
printf(" %.40s...\n", value);
|
||||
else
|
||||
printf(" %s\n", value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* streamFile:
|
||||
* @filename: the file name to parse
|
||||
*
|
||||
* Parse, validate and print information about an XML file.
|
||||
*/
|
||||
static void
|
||||
streamFile(const char *filename) {
|
||||
xmlTextReaderPtr reader;
|
||||
int ret;
|
||||
|
||||
|
||||
/*
|
||||
* Pass some special parsing options to activate DTD attribute defaulting,
|
||||
* entities substitution and DTD validation
|
||||
*/
|
||||
reader = xmlReaderForFile(filename, NULL,
|
||||
XML_PARSE_DTDATTR | /* default DTD attributes */
|
||||
XML_PARSE_NOENT | /* substitute entities */
|
||||
XML_PARSE_DTDVALID); /* validate with the DTD */
|
||||
if (reader != NULL) {
|
||||
ret = xmlTextReaderRead(reader);
|
||||
while (ret == 1) {
|
||||
processNode(reader);
|
||||
ret = xmlTextReaderRead(reader);
|
||||
}
|
||||
/*
|
||||
* Once the document has been fully parsed check the validation results
|
||||
*/
|
||||
if (xmlTextReaderIsValid(reader) != 1) {
|
||||
fprintf(stderr, "Document %s does not validate\n", filename);
|
||||
}
|
||||
xmlFreeTextReader(reader);
|
||||
if (ret != 0) {
|
||||
fprintf(stderr, "%s : failed to parse\n", filename);
|
||||
}
|
||||
} else {
|
||||
fprintf(stderr, "Unable to open %s\n", filename);
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc != 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
streamFile(argv[1]);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "XInclude support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,119 +0,0 @@
|
||||
/**
|
||||
* section: xmlReader
|
||||
* synopsis: Show how to extract subdocuments with xmlReader
|
||||
* purpose: Demonstrate the use of xmlTextReaderPreservePattern()
|
||||
* to parse an XML file with the xmlReader while collecting
|
||||
* only some subparts of the document.
|
||||
* (Note that the XMLReader functions require libxml2 version later
|
||||
* than 2.6.)
|
||||
* usage: reader3
|
||||
* test: reader3 > reader3.tmp ; diff reader3.tmp reader3.res ; rm reader3.tmp
|
||||
* author: Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/xmlreader.h>
|
||||
|
||||
#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED)
|
||||
|
||||
/**
|
||||
* streamFile:
|
||||
* @filename: the file name to parse
|
||||
*
|
||||
* Parse and print information about an XML file.
|
||||
*
|
||||
* Returns the resulting doc with just the elements preserved.
|
||||
*/
|
||||
static xmlDocPtr
|
||||
extractFile(const char *filename, const xmlChar *pattern) {
|
||||
xmlDocPtr doc;
|
||||
xmlTextReaderPtr reader;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* build an xmlReader for that file
|
||||
*/
|
||||
reader = xmlReaderForFile(filename, NULL, 0);
|
||||
if (reader != NULL) {
|
||||
/*
|
||||
* add the pattern to preserve
|
||||
*/
|
||||
if (xmlTextReaderPreservePattern(reader, pattern, NULL) < 0) {
|
||||
fprintf(stderr, "%s : failed add preserve pattern %s\n",
|
||||
filename, (const char *) pattern);
|
||||
}
|
||||
/*
|
||||
* Parse and traverse the tree, collecting the nodes in the process
|
||||
*/
|
||||
ret = xmlTextReaderRead(reader);
|
||||
while (ret == 1) {
|
||||
ret = xmlTextReaderRead(reader);
|
||||
}
|
||||
if (ret != 0) {
|
||||
fprintf(stderr, "%s : failed to parse\n", filename);
|
||||
xmlFreeTextReader(reader);
|
||||
return(NULL);
|
||||
}
|
||||
/*
|
||||
* get the resulting nodes
|
||||
*/
|
||||
doc = xmlTextReaderCurrentDoc(reader);
|
||||
/*
|
||||
* Free up the reader
|
||||
*/
|
||||
xmlFreeTextReader(reader);
|
||||
} else {
|
||||
fprintf(stderr, "Unable to open %s\n", filename);
|
||||
return(NULL);
|
||||
}
|
||||
return(doc);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
const char *filename = "test3.xml";
|
||||
const char *pattern = "preserved";
|
||||
xmlDocPtr doc;
|
||||
|
||||
if (argc == 3) {
|
||||
filename = argv[1];
|
||||
pattern = argv[2];
|
||||
}
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
doc = extractFile(filename, (const xmlChar *) pattern);
|
||||
if (doc != NULL) {
|
||||
/*
|
||||
* ouptut the result.
|
||||
*/
|
||||
xmlDocDump(stdout, doc);
|
||||
/*
|
||||
* don't forget to free up the doc
|
||||
*/
|
||||
xmlFreeDoc(doc);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "Reader or Pattern support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,13 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc><parent><preserved/><preserved>
|
||||
content1
|
||||
<child1/>
|
||||
<child2>content2</child2>
|
||||
<preserved>too</preserved>
|
||||
<child2>content3</child2>
|
||||
<preserved/>
|
||||
<child2>content4</child2>
|
||||
<preserved/>
|
||||
<child2>content5</child2>
|
||||
content6
|
||||
</preserved><preserved/><preserved/></parent></doc>
|
||||
@@ -1,122 +0,0 @@
|
||||
/**
|
||||
* section: xmlReader
|
||||
* synopsis: Parse multiple XML files reusing an xmlReader
|
||||
* purpose: Demonstrate the use of xmlReaderForFile() and
|
||||
* xmlReaderNewFile to parse XML files while reusing the reader object
|
||||
* and parser context. (Note that the XMLReader functions require
|
||||
* libxml2 version later than 2.6.)
|
||||
* usage: reader4 <filename> [ filename ... ]
|
||||
* test: reader4 test1.xml test2.xml test3.xml > reader4.tmp ; diff reader4.tmp reader4.res ; rm reader4.tmp
|
||||
* author: Graham Bennett
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/xmlreader.h>
|
||||
|
||||
#ifdef LIBXML_READER_ENABLED
|
||||
|
||||
static void processDoc(xmlTextReaderPtr readerPtr) {
|
||||
int ret;
|
||||
xmlDocPtr docPtr;
|
||||
const xmlChar *URL;
|
||||
|
||||
ret = xmlTextReaderRead(readerPtr);
|
||||
while (ret == 1) {
|
||||
ret = xmlTextReaderRead(readerPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
* One can obtain the document pointer to get insteresting
|
||||
* information about the document like the URL, but one must also
|
||||
* be sure to clean it up at the end (see below).
|
||||
*/
|
||||
docPtr = xmlTextReaderCurrentDoc(readerPtr);
|
||||
if (NULL == docPtr) {
|
||||
fprintf(stderr, "failed to obtain document\n");
|
||||
return;
|
||||
}
|
||||
|
||||
URL = docPtr->URL;
|
||||
if (NULL == URL) {
|
||||
fprintf(stderr, "Failed to obtain URL\n");
|
||||
}
|
||||
|
||||
if (ret != 0) {
|
||||
fprintf(stderr, "%s: Failed to parse\n", URL);
|
||||
return;
|
||||
}
|
||||
|
||||
printf("%s: Processed ok\n", (const char *)URL);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
xmlTextReaderPtr readerPtr;
|
||||
int i;
|
||||
xmlDocPtr docPtr;
|
||||
|
||||
if (argc < 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialises the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
/*
|
||||
* Create a new reader for the first file and process the
|
||||
* document.
|
||||
*/
|
||||
readerPtr = xmlReaderForFile(argv[1], NULL, 0);
|
||||
if (NULL == readerPtr) {
|
||||
fprintf(stderr, "%s: failed to create reader\n", argv[1]);
|
||||
return(1);
|
||||
}
|
||||
processDoc(readerPtr);
|
||||
|
||||
/*
|
||||
* The reader can be reused for subsequent files.
|
||||
*/
|
||||
for (i=2; i < argc; ++i) {
|
||||
xmlReaderNewFile(readerPtr, argv[i], NULL, 0);
|
||||
if (NULL == readerPtr) {
|
||||
fprintf(stderr, "%s: failed to create reader\n", argv[i]);
|
||||
return(1);
|
||||
}
|
||||
processDoc(readerPtr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Since we've called xmlTextReaderCurrentDoc, we now have to
|
||||
* clean up after ourselves. We only have to do this the last
|
||||
* time, because xmlReaderNewFile calls xmlCtxtReset which takes
|
||||
* care of it.
|
||||
*/
|
||||
docPtr = xmlTextReaderCurrentDoc(readerPtr);
|
||||
if (docPtr != NULL)
|
||||
xmlFreeDoc(docPtr);
|
||||
|
||||
/*
|
||||
* Clean up the reader.
|
||||
*/
|
||||
xmlFreeTextReader(readerPtr);
|
||||
|
||||
/*
|
||||
* Cleanup function for the XML library.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "xmlReader support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,3 +0,0 @@
|
||||
test1.xml: Processed ok
|
||||
test2.xml: Processed ok
|
||||
test3.xml: Processed ok
|
||||
@@ -1 +0,0 @@
|
||||
<doc/>
|
||||
@@ -1,13 +0,0 @@
|
||||
<!DOCTYPE doc [
|
||||
<!ELEMENT doc (src | dest)*>
|
||||
<!ELEMENT src EMPTY>
|
||||
<!ELEMENT dest EMPTY>
|
||||
<!ATTLIST src ref IDREF #IMPLIED>
|
||||
<!ATTLIST dest id ID #IMPLIED>
|
||||
]>
|
||||
<doc>
|
||||
<src ref="foo"/>
|
||||
<dest id="foo"/>
|
||||
<src ref="foo"/>
|
||||
</doc>
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<doc>
|
||||
<parent>
|
||||
<discarded>
|
||||
<discarded/>
|
||||
</discarded>
|
||||
<preserved/>
|
||||
This text node must be discarded
|
||||
<discarded>
|
||||
<discarded/>
|
||||
</discarded>
|
||||
<preserved>
|
||||
content1
|
||||
<child1></child1>
|
||||
<child2>content2</child2>
|
||||
<preserved>too</preserved>
|
||||
<child2>content3</child2>
|
||||
<preserved></preserved>
|
||||
<child2>content4</child2>
|
||||
<preserved/>
|
||||
<child2>content5</child2>
|
||||
content6
|
||||
</preserved>
|
||||
This text node must be discarded
|
||||
<discarded>
|
||||
<discarded/>
|
||||
</discarded>
|
||||
This text node must be discarded
|
||||
<preserved></preserved>
|
||||
This text node must be discarded
|
||||
<preserved/>
|
||||
This text node must be discarded
|
||||
<discarded>
|
||||
<discarded/>
|
||||
</discarded>
|
||||
This text node must be discarded
|
||||
</parent>
|
||||
</doc>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,94 +0,0 @@
|
||||
/**
|
||||
* section: Tree
|
||||
* synopsis: Navigates a tree to print element names
|
||||
* purpose: Parse a file to a tree, use xmlDocGetRootElement() to
|
||||
* get the root element, then walk the document and print
|
||||
* all the element name in document order.
|
||||
* usage: tree1 filename_or_URL
|
||||
* test: tree1 test2.xml > tree1.tmp ; diff tree1.tmp tree1.res ; rm tree1.tmp
|
||||
* author: Dodji Seketeli
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
#ifdef LIBXML_TREE_ENABLED
|
||||
|
||||
/*
|
||||
*To compile this file using gcc you can type
|
||||
*gcc `xml2-config --cflags --libs` -o xmlexample libxml2-example.c
|
||||
*/
|
||||
|
||||
/**
|
||||
* print_element_names:
|
||||
* @a_node: the initial xml node to consider.
|
||||
*
|
||||
* Prints the names of the all the xml elements
|
||||
* that are siblings or children of a given xml node.
|
||||
*/
|
||||
static void
|
||||
print_element_names(xmlNode * a_node)
|
||||
{
|
||||
xmlNode *cur_node = NULL;
|
||||
|
||||
for (cur_node = a_node; cur_node; cur_node = cur_node->next) {
|
||||
if (cur_node->type == XML_ELEMENT_NODE) {
|
||||
printf("node type: Element, name: %s\n", cur_node->name);
|
||||
}
|
||||
|
||||
print_element_names(cur_node->children);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Simple example to parse a file called "file.xml",
|
||||
* walk down the DOM, and print the name of the
|
||||
* xml elements nodes.
|
||||
*/
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
xmlDoc *doc = NULL;
|
||||
xmlNode *root_element = NULL;
|
||||
|
||||
if (argc != 2)
|
||||
return(1);
|
||||
|
||||
/*
|
||||
* this initialize the library and check potential ABI mismatches
|
||||
* between the version it was compiled for and the actual shared
|
||||
* library used.
|
||||
*/
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
/*parse the file and get the DOM */
|
||||
doc = xmlReadFile(argv[1], NULL, 0);
|
||||
|
||||
if (doc == NULL) {
|
||||
printf("error: could not parse file %s\n", argv[1]);
|
||||
}
|
||||
|
||||
/*Get the root element node */
|
||||
root_element = xmlDocGetRootElement(doc);
|
||||
|
||||
print_element_names(root_element);
|
||||
|
||||
/*free the document */
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
/*
|
||||
*Free the global variables that may
|
||||
*have been allocated by the parser.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "Tree support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,4 +0,0 @@
|
||||
node type: Element, name: doc
|
||||
node type: Element, name: src
|
||||
node type: Element, name: dest
|
||||
node type: Element, name: src
|
||||
@@ -1,118 +0,0 @@
|
||||
/*
|
||||
* section: Tree
|
||||
* synopsis: Creates a tree
|
||||
* purpose: Shows how to create document, nodes and dump it to stdout or file.
|
||||
* usage: tree2 <filename> -Default output: stdout
|
||||
* test: tree2 > tree2.tmp ; diff tree2.tmp tree2.res ; rm tree2.tmp
|
||||
* author: Lucas Brasilino <brasilino@recife.pe.gov.br>
|
||||
* copy: see Copyright for the status of this software
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/tree.h>
|
||||
|
||||
#if defined(LIBXML_TREE_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
|
||||
|
||||
/*
|
||||
*To compile this file using gcc you can type
|
||||
*gcc `xml2-config --cflags --libs` -o tree2 tree2.c
|
||||
*/
|
||||
|
||||
/* A simple example how to create DOM. Libxml2 automagically
|
||||
* allocates the necessary amount of memory to it.
|
||||
*/
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
xmlDocPtr doc = NULL; /* document pointer */
|
||||
xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
|
||||
xmlDtdPtr dtd = NULL; /* DTD pointer */
|
||||
char buff[256];
|
||||
int i, j;
|
||||
|
||||
LIBXML_TEST_VERSION;
|
||||
|
||||
/*
|
||||
* Creates a new document, a node and set it as a root node
|
||||
*/
|
||||
doc = xmlNewDoc(BAD_CAST "1.0");
|
||||
root_node = xmlNewNode(NULL, BAD_CAST "root");
|
||||
xmlDocSetRootElement(doc, root_node);
|
||||
|
||||
/*
|
||||
* Creates a DTD declaration. Isn't mandatory.
|
||||
*/
|
||||
dtd = xmlCreateIntSubset(doc, BAD_CAST "root", NULL, BAD_CAST "tree2.dtd");
|
||||
|
||||
/*
|
||||
* xmlNewChild() creates a new node, which is "attached" as child node
|
||||
* of root_node node.
|
||||
*/
|
||||
xmlNewChild(root_node, NULL, BAD_CAST "node1",
|
||||
BAD_CAST "content of node 1");
|
||||
/*
|
||||
* The same as above, but the new child node doesn't have a content
|
||||
*/
|
||||
xmlNewChild(root_node, NULL, BAD_CAST "node2", NULL);
|
||||
|
||||
/*
|
||||
* xmlNewProp() creates attributes, which is "attached" to an node.
|
||||
* It returns xmlAttrPtr, which isn't used here.
|
||||
*/
|
||||
node =
|
||||
xmlNewChild(root_node, NULL, BAD_CAST "node3",
|
||||
BAD_CAST "this node has attributes");
|
||||
xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
|
||||
xmlNewProp(node, BAD_CAST "foo", BAD_CAST "bar");
|
||||
|
||||
/*
|
||||
* Here goes another way to create nodes. xmlNewNode() and xmlNewText
|
||||
* creates a node and a text node separately. They are "attached"
|
||||
* by xmlAddChild()
|
||||
*/
|
||||
node = xmlNewNode(NULL, BAD_CAST "node4");
|
||||
node1 = xmlNewText(BAD_CAST
|
||||
"other way to create content (which is also a node)");
|
||||
xmlAddChild(node, node1);
|
||||
xmlAddChild(root_node, node);
|
||||
|
||||
/*
|
||||
* A simple loop that "automates" nodes creation
|
||||
*/
|
||||
for (i = 5; i < 7; i++) {
|
||||
sprintf(buff, "node%d", i);
|
||||
node = xmlNewChild(root_node, NULL, BAD_CAST buff, NULL);
|
||||
for (j = 1; j < 4; j++) {
|
||||
sprintf(buff, "node%d%d", i, j);
|
||||
node1 = xmlNewChild(node, NULL, BAD_CAST buff, NULL);
|
||||
xmlNewProp(node1, BAD_CAST "odd", BAD_CAST((j % 2) ? "no" : "yes"));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Dumping document to stdio or file
|
||||
*/
|
||||
xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
|
||||
|
||||
/*free the document */
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
/*
|
||||
*Free the global variables that may
|
||||
*have been allocated by the parser.
|
||||
*/
|
||||
xmlCleanupParser();
|
||||
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return(0);
|
||||
}
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "tree support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE root SYSTEM "tree2.dtd">
|
||||
<root>
|
||||
<node1>content of node 1</node1>
|
||||
<node2/>
|
||||
<node3 attribute="yes" foo="bar">this node has attributes</node3>
|
||||
<node4>other way to create content (which is also a node)</node4>
|
||||
<node5>
|
||||
<node51 odd="no"/>
|
||||
<node52 odd="yes"/>
|
||||
<node53 odd="no"/>
|
||||
</node5>
|
||||
<node6>
|
||||
<node61 odd="no"/>
|
||||
<node62 odd="yes"/>
|
||||
<node63 odd="no"/>
|
||||
</node6>
|
||||
</root>
|
||||
@@ -1,7 +0,0 @@
|
||||
<thing>
|
||||
<thing1>hello</thing1>
|
||||
</thing>
|
||||
<thing>
|
||||
<thing2>goodbye</thing2>
|
||||
</thing>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<EXAMPLE><!--This is a comment with special chars: <äöü>--><ORDER version="1.0" xml:lang="de"><!--This is another comment with special chars: <äöü>--><HEADER><X_ORDER_ID>0000053535</X_ORDER_ID><CUSTOMER_ID>1010</CUSTOMER_ID><NAME_1>Müller</NAME_1><NAME_2>Jörg</NAME_2></HEADER><ENTRIES><ENTRY><ARTICLE><Test></ARTICLE><ENTRY_NO>10</ENTRY_NO></ENTRY><ENTRY><ARTICLE><Test 2></ARTICLE><ENTRY_NO>20</ENTRY_NO></ENTRY></ENTRIES><FOOTER><TEXT>This is a text.</TEXT></FOOTER></ORDER></EXAMPLE>
|
||||
@@ -1,250 +0,0 @@
|
||||
/**
|
||||
* section: XPath
|
||||
* synopsis: Evaluate XPath expression and prints result node set.
|
||||
* purpose: Shows how to evaluate XPath expression and register
|
||||
* known namespaces in XPath context.
|
||||
* usage: xpath1 <xml-file> <xpath-expr> [<known-ns-list>]
|
||||
* test: ./xpath1 test3.xml '//child2' > xpath1.tmp ; diff xpath1.tmp xpath1.res ; rm xpath1.tmp
|
||||
* author: Aleksey Sanin
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/xpath.h>
|
||||
#include <libxml/xpathInternals.h>
|
||||
|
||||
#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_SAX1_ENABLED)
|
||||
|
||||
|
||||
static void usage(const char *name);
|
||||
int execute_xpath_expression(const char* filename, const xmlChar* xpathExpr, const xmlChar* nsList);
|
||||
int register_namespaces(xmlXPathContextPtr xpathCtx, const xmlChar* nsList);
|
||||
void print_xpath_nodes(xmlNodeSetPtr nodes, FILE* output);
|
||||
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
/* Parse command line and process file */
|
||||
if((argc < 3) || (argc > 4)) {
|
||||
fprintf(stderr, "Error: wrong number of arguments.\n");
|
||||
usage(argv[0]);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Init libxml */
|
||||
xmlInitParser();
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
/* Do the main job */
|
||||
if(execute_xpath_expression(argv[1], BAD_CAST argv[2], (argc > 3) ? BAD_CAST argv[3] : NULL) < 0) {
|
||||
usage(argv[0]);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Shutdown libxml */
|
||||
xmlCleanupParser();
|
||||
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* usage:
|
||||
* @name: the program name.
|
||||
*
|
||||
* Prints usage information.
|
||||
*/
|
||||
static void
|
||||
usage(const char *name) {
|
||||
assert(name);
|
||||
|
||||
fprintf(stderr, "Usage: %s <xml-file> <xpath-expr> [<known-ns-list>]\n", name);
|
||||
fprintf(stderr, "where <known-ns-list> is a list of known namespaces\n");
|
||||
fprintf(stderr, "in \"<prefix1>=<href1> <prefix2>=href2> ...\" format\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* execute_xpath_expression:
|
||||
* @filename: the input XML filename.
|
||||
* @xpathExpr: the xpath expression for evaluation.
|
||||
* @nsList: the optional list of known namespaces in
|
||||
* "<prefix1>=<href1> <prefix2>=href2> ..." format.
|
||||
*
|
||||
* Parses input XML file, evaluates XPath expression and prints results.
|
||||
*
|
||||
* Returns 0 on success and a negative value otherwise.
|
||||
*/
|
||||
int
|
||||
execute_xpath_expression(const char* filename, const xmlChar* xpathExpr, const xmlChar* nsList) {
|
||||
xmlDocPtr doc;
|
||||
xmlXPathContextPtr xpathCtx;
|
||||
xmlXPathObjectPtr xpathObj;
|
||||
|
||||
assert(filename);
|
||||
assert(xpathExpr);
|
||||
|
||||
/* Load XML document */
|
||||
doc = xmlParseFile(filename);
|
||||
if (doc == NULL) {
|
||||
fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Create xpath evaluation context */
|
||||
xpathCtx = xmlXPathNewContext(doc);
|
||||
if(xpathCtx == NULL) {
|
||||
fprintf(stderr,"Error: unable to create new XPath context\n");
|
||||
xmlFreeDoc(doc);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Register namespaces from list (if any) */
|
||||
if((nsList != NULL) && (register_namespaces(xpathCtx, nsList) < 0)) {
|
||||
fprintf(stderr,"Error: failed to register namespaces list \"%s\"\n", nsList);
|
||||
xmlXPathFreeContext(xpathCtx);
|
||||
xmlFreeDoc(doc);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Evaluate xpath expression */
|
||||
xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx);
|
||||
if(xpathObj == NULL) {
|
||||
fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", xpathExpr);
|
||||
xmlXPathFreeContext(xpathCtx);
|
||||
xmlFreeDoc(doc);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Print results */
|
||||
print_xpath_nodes(xpathObj->nodesetval, stdout);
|
||||
|
||||
/* Cleanup */
|
||||
xmlXPathFreeObject(xpathObj);
|
||||
xmlXPathFreeContext(xpathCtx);
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* register_namespaces:
|
||||
* @xpathCtx: the pointer to an XPath context.
|
||||
* @nsList: the list of known namespaces in
|
||||
* "<prefix1>=<href1> <prefix2>=href2> ..." format.
|
||||
*
|
||||
* Registers namespaces from @nsList in @xpathCtx.
|
||||
*
|
||||
* Returns 0 on success and a negative value otherwise.
|
||||
*/
|
||||
int
|
||||
register_namespaces(xmlXPathContextPtr xpathCtx, const xmlChar* nsList) {
|
||||
xmlChar* nsListDup;
|
||||
xmlChar* prefix;
|
||||
xmlChar* href;
|
||||
xmlChar* next;
|
||||
|
||||
assert(xpathCtx);
|
||||
assert(nsList);
|
||||
|
||||
nsListDup = xmlStrdup(nsList);
|
||||
if(nsListDup == NULL) {
|
||||
fprintf(stderr, "Error: unable to strdup namespaces list\n");
|
||||
return(-1);
|
||||
}
|
||||
|
||||
next = nsListDup;
|
||||
while(next != NULL) {
|
||||
/* skip spaces */
|
||||
while((*next) == ' ') next++;
|
||||
if((*next) == '\0') break;
|
||||
|
||||
/* find prefix */
|
||||
prefix = next;
|
||||
next = (xmlChar*)xmlStrchr(next, '=');
|
||||
if(next == NULL) {
|
||||
fprintf(stderr,"Error: invalid namespaces list format\n");
|
||||
xmlFree(nsListDup);
|
||||
return(-1);
|
||||
}
|
||||
*(next++) = '\0';
|
||||
|
||||
/* find href */
|
||||
href = next;
|
||||
next = (xmlChar*)xmlStrchr(next, ' ');
|
||||
if(next != NULL) {
|
||||
*(next++) = '\0';
|
||||
}
|
||||
|
||||
/* do register namespace */
|
||||
if(xmlXPathRegisterNs(xpathCtx, prefix, href) != 0) {
|
||||
fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", prefix, href);
|
||||
xmlFree(nsListDup);
|
||||
return(-1);
|
||||
}
|
||||
}
|
||||
|
||||
xmlFree(nsListDup);
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* print_xpath_nodes:
|
||||
* @nodes: the nodes set.
|
||||
* @output: the output file handle.
|
||||
*
|
||||
* Prints the @nodes content to @output.
|
||||
*/
|
||||
void
|
||||
print_xpath_nodes(xmlNodeSetPtr nodes, FILE* output) {
|
||||
xmlNodePtr cur;
|
||||
int size;
|
||||
int i;
|
||||
|
||||
assert(output);
|
||||
size = (nodes) ? nodes->nodeNr : 0;
|
||||
|
||||
fprintf(output, "Result (%d nodes):\n", size);
|
||||
for(i = 0; i < size; ++i) {
|
||||
assert(nodes->nodeTab[i]);
|
||||
|
||||
if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
|
||||
xmlNsPtr ns;
|
||||
|
||||
ns = (xmlNsPtr)nodes->nodeTab[i];
|
||||
cur = (xmlNodePtr)ns->next;
|
||||
if(cur->ns) {
|
||||
fprintf(output, "= namespace \"%s\"=\"%s\" for node %s:%s\n",
|
||||
ns->prefix, ns->href, cur->ns->href, cur->name);
|
||||
} else {
|
||||
fprintf(output, "= namespace \"%s\"=\"%s\" for node %s\n",
|
||||
ns->prefix, ns->href, cur->name);
|
||||
}
|
||||
} else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
|
||||
cur = nodes->nodeTab[i];
|
||||
if(cur->ns) {
|
||||
fprintf(output, "= element node \"%s:%s\"\n",
|
||||
cur->ns->href, cur->name);
|
||||
} else {
|
||||
fprintf(output, "= element node \"%s\"\n",
|
||||
cur->name);
|
||||
}
|
||||
} else {
|
||||
cur = nodes->nodeTab[i];
|
||||
fprintf(output, "= node \"%s\": type %d\n", cur->name, cur->type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "XPath support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,5 +0,0 @@
|
||||
Result (4 nodes):
|
||||
= element node "child2"
|
||||
= element node "child2"
|
||||
= element node "child2"
|
||||
= element node "child2"
|
||||
@@ -1,190 +0,0 @@
|
||||
/**
|
||||
* section: XPath
|
||||
* synopsis: Load a document, locate subelements with XPath, modify
|
||||
* said elements and save the resulting document.
|
||||
* purpose: Shows how to make a full round-trip from a load/edit/save
|
||||
* usage: xpath2 <xml-file> <xpath-expr> <new-value>
|
||||
* test: xpath2 test3.xml '//discarded' discarded > xpath2.tmp ; diff xpath2.tmp xpath2.res ; rm xpath2.tmp
|
||||
* author: Aleksey Sanin and Daniel Veillard
|
||||
* copy: see Copyright for the status of this software.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>
|
||||
#include <libxml/xpath.h>
|
||||
#include <libxml/xpathInternals.h>
|
||||
|
||||
#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_SAX1_ENABLED) && \
|
||||
defined(LIBXML_OUTPUT_ENABLED)
|
||||
|
||||
|
||||
static void usage(const char *name);
|
||||
static int example4(const char *filename, const xmlChar * xpathExpr,
|
||||
const xmlChar * value);
|
||||
static void update_xpath_nodes(xmlNodeSetPtr nodes, const xmlChar * value);
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv) {
|
||||
/* Parse command line and process file */
|
||||
if (argc != 4) {
|
||||
fprintf(stderr, "Error: wrong number of arguments.\n");
|
||||
usage(argv[0]);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Init libxml */
|
||||
xmlInitParser();
|
||||
LIBXML_TEST_VERSION
|
||||
|
||||
/* Do the main job */
|
||||
if (example4(argv[1], BAD_CAST argv[2], BAD_CAST argv[3])) {
|
||||
usage(argv[0]);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Shutdown libxml */
|
||||
xmlCleanupParser();
|
||||
|
||||
/*
|
||||
* this is to debug memory for regression tests
|
||||
*/
|
||||
xmlMemoryDump();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* usage:
|
||||
* @name: the program name.
|
||||
*
|
||||
* Prints usage information.
|
||||
*/
|
||||
static void
|
||||
usage(const char *name) {
|
||||
assert(name);
|
||||
|
||||
fprintf(stderr, "Usage: %s <xml-file> <xpath-expr> <value>\n", name);
|
||||
}
|
||||
|
||||
/**
|
||||
* example4:
|
||||
* @filename: the input XML filename.
|
||||
* @xpathExpr: the xpath expression for evaluation.
|
||||
* @value: the new node content.
|
||||
*
|
||||
* Parses input XML file, evaluates XPath expression and update the nodes
|
||||
* then print the result.
|
||||
*
|
||||
* Returns 0 on success and a negative value otherwise.
|
||||
*/
|
||||
static int
|
||||
example4(const char* filename, const xmlChar* xpathExpr, const xmlChar* value) {
|
||||
xmlDocPtr doc;
|
||||
xmlXPathContextPtr xpathCtx;
|
||||
xmlXPathObjectPtr xpathObj;
|
||||
|
||||
assert(filename);
|
||||
assert(xpathExpr);
|
||||
assert(value);
|
||||
|
||||
/* Load XML document */
|
||||
doc = xmlParseFile(filename);
|
||||
if (doc == NULL) {
|
||||
fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Create xpath evaluation context */
|
||||
xpathCtx = xmlXPathNewContext(doc);
|
||||
if(xpathCtx == NULL) {
|
||||
fprintf(stderr,"Error: unable to create new XPath context\n");
|
||||
xmlFreeDoc(doc);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* Evaluate xpath expression */
|
||||
xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx);
|
||||
if(xpathObj == NULL) {
|
||||
fprintf(stderr,"Error: unable to evaluate xpath expression \"%s\"\n", xpathExpr);
|
||||
xmlXPathFreeContext(xpathCtx);
|
||||
xmlFreeDoc(doc);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
/* update selected nodes */
|
||||
update_xpath_nodes(xpathObj->nodesetval, value);
|
||||
|
||||
|
||||
/* Cleanup of XPath data */
|
||||
xmlXPathFreeObject(xpathObj);
|
||||
xmlXPathFreeContext(xpathCtx);
|
||||
|
||||
/* dump the resulting document */
|
||||
xmlDocDump(stdout, doc);
|
||||
|
||||
|
||||
/* free the document */
|
||||
xmlFreeDoc(doc);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* update_xpath_nodes:
|
||||
* @nodes: the nodes set.
|
||||
* @value: the new value for the node(s)
|
||||
*
|
||||
* Prints the @nodes content to @output.
|
||||
*/
|
||||
static void
|
||||
update_xpath_nodes(xmlNodeSetPtr nodes, const xmlChar* value) {
|
||||
int size;
|
||||
int i;
|
||||
|
||||
assert(value);
|
||||
size = (nodes) ? nodes->nodeNr : 0;
|
||||
|
||||
/*
|
||||
* NOTE: the nodes are processed in reverse order, i.e. reverse document
|
||||
* order because xmlNodeSetContent can actually free up descendant
|
||||
* of the node and such nodes may have been selected too ! Handling
|
||||
* in reverse order ensure that descendant are accessed first, before
|
||||
* they get removed. Mixing XPath and modifications on a tree must be
|
||||
* done carefully !
|
||||
*/
|
||||
for(i = size - 1; i >= 0; i--) {
|
||||
assert(nodes->nodeTab[i]);
|
||||
|
||||
xmlNodeSetContent(nodes->nodeTab[i], value);
|
||||
/*
|
||||
* All the elements returned by an XPath query are pointers to
|
||||
* elements from the tree *except* namespace nodes where the XPath
|
||||
* semantic is different from the implementation in libxml2 tree.
|
||||
* As a result when a returned node set is freed when
|
||||
* xmlXPathFreeObject() is called, that routine must check the
|
||||
* element type. But node from the returned set may have been removed
|
||||
* by xmlNodeSetContent() resulting in access to freed data.
|
||||
* This can be exercised by running
|
||||
* valgrind xpath2 test3.xml '//discarded' discarded
|
||||
* There is 2 ways around it:
|
||||
* - make a copy of the pointers to the nodes from the result set
|
||||
* then call xmlXPathFreeObject() and then modify the nodes
|
||||
* or
|
||||
* - remove the reference to the modified nodes from the node set
|
||||
* as they are processed, if they are not namespace nodes.
|
||||
*/
|
||||
if (nodes->nodeTab[i]->type != XML_NAMESPACE_DECL)
|
||||
nodes->nodeTab[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
int main(void) {
|
||||
fprintf(stderr, "XPath support not compiled in\n");
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
@@ -1,30 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<parent>
|
||||
<discarded>discarded</discarded>
|
||||
<preserved/>
|
||||
This text node must be discarded
|
||||
<discarded>discarded</discarded>
|
||||
<preserved>
|
||||
content1
|
||||
<child1/>
|
||||
<child2>content2</child2>
|
||||
<preserved>too</preserved>
|
||||
<child2>content3</child2>
|
||||
<preserved/>
|
||||
<child2>content4</child2>
|
||||
<preserved/>
|
||||
<child2>content5</child2>
|
||||
content6
|
||||
</preserved>
|
||||
This text node must be discarded
|
||||
<discarded>discarded</discarded>
|
||||
This text node must be discarded
|
||||
<preserved/>
|
||||
This text node must be discarded
|
||||
<preserved/>
|
||||
This text node must be discarded
|
||||
<discarded>discarded</discarded>
|
||||
This text node must be discarded
|
||||
</parent>
|
||||
</doc>
|
||||
@@ -1,374 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html">
|
||||
<style type="text/css"></style>
|
||||
<!--
|
||||
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>XML resources publication guidelines</title>
|
||||
</head>
|
||||
|
||||
<body bgcolor="#fffacd" text="#000000">
|
||||
<h1 align="center">XML resources publication guidelines</h1>
|
||||
|
||||
<p></p>
|
||||
|
||||
<p>The goal of this document is to provide a set of guidelines and tips
|
||||
helping the publication and deployment of <a
|
||||
href="http://www.w3.org/XML/">XML</a> resources for the <a
|
||||
href="http://www.gnome.org/">GNOME project</a>. However it is not tied to
|
||||
GNOME and might be helpful more generally. I welcome <a
|
||||
href="mailto:[email protected]">feedback</a> on this document.</p>
|
||||
|
||||
<p>The intended audience is the software developers who started using XML
|
||||
for some of the resources of their project, as a storage format, for data
|
||||
exchange, checking or transformations. There have been an increasing number
|
||||
of new XML formats defined, but not all steps have been taken, possibly because of
|
||||
lack of documentation, to truly gain all the benefits of the use of XML.
|
||||
These guidelines hope to improve the matter and provide a better overview of
|
||||
the overall XML processing and associated steps needed to deploy it
|
||||
successfully:</p>
|
||||
|
||||
<p>Table of contents:</p>
|
||||
<ol>
|
||||
<li><a href="#Design">Design guidelines</a></li>
|
||||
<li><a href="#Canonical">Canonical URL</a></li>
|
||||
<li><a href="#Catalog">Catalog setup</a></li>
|
||||
<li><a href="#Package">Package integration</a></li>
|
||||
</ol>
|
||||
|
||||
<h2><a name="Design">Design guidelines</a></h2>
|
||||
|
||||
<p>This part intends to focus on the format itself of XML. It may arrive
|
||||
a bit too late since the structure of the document may already be cast in
|
||||
existing and deployed code. Still, here are a few rules which might be helpful
|
||||
when designing a new XML vocabulary or making the revision of an existing
|
||||
format:</p>
|
||||
|
||||
<h3>Reuse existing formats:</h3>
|
||||
|
||||
<p>This may sounds a bit simplistic, but before designing your own format,
|
||||
try to lookup existing XML vocabularies on similar data. Ideally this allows
|
||||
you to reuse them, in which case a lot of the existing tools like DTD, schemas
|
||||
and stylesheets may already be available. If you are looking at a
|
||||
documentation format, <a href="http://www.docbook.org/">DocBook</a> should
|
||||
handle your needs. If reuse is not possible because some semantic or use case
|
||||
aspects are too different this will be helpful avoiding design errors like
|
||||
targeting the vocabulary to the wrong abstraction level. In this format
|
||||
design phase try to be synthetic and be sure to express the real content of
|
||||
your data and use the XML structure to express the semantic and context of
|
||||
those data.</p>
|
||||
|
||||
<h3>DTD rules:</h3>
|
||||
|
||||
<p>Building a DTD (Document Type Definition) or a Schema describing the
|
||||
structure allowed by instances is the core of the design process of the
|
||||
vocabulary. Here are a few tips:</p>
|
||||
<ul>
|
||||
<li>use significant words for the element and attributes names.</li>
|
||||
<li>do not use attributes for general textual content, attributes
|
||||
will be modified by the parser before reaching the application,
|
||||
spaces and line informations will be modified.</li>
|
||||
<li>use single elements for every string that might be subject to
|
||||
localization. The canonical way to localize XML content is to use
|
||||
siblings element carrying different xml:lang attributes like in the
|
||||
following:
|
||||
<pre><welcome>
|
||||
<msg xml:lang="en">hello</msg>
|
||||
<msg xml:lang="fr">bonjour</msg>
|
||||
</welcome></pre>
|
||||
</li>
|
||||
<li>use attributes to refine the content of an element but avoid them for
|
||||
more complex tasks, attribute parsing is not cheaper than an element and
|
||||
it is far easier to make an element content more complex while attribute
|
||||
will have to remain very simple.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Versioning:</h3>
|
||||
|
||||
<p>As part of the design, make sure the structure you define will be usable
|
||||
for future extension that you may not consider for the current version. There
|
||||
are two parts to this:</p>
|
||||
<ul>
|
||||
<li>Make sure the instance contains a version number which will allow to
|
||||
make backward compatibility easy. Something as simple as having a
|
||||
<code>version="1.0"</code> on the root document of the instance is
|
||||
sufficient.</li>
|
||||
<li>While designing the code doing the analysis of the data provided by the
|
||||
XML parser, make sure you can work with unknown versions, generate a UI
|
||||
warning and process only the tags recognized by your version but keep in
|
||||
mind that you should not break on unknown elements if the version
|
||||
attribute was not in the recognized set.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Other design parts:</h3>
|
||||
|
||||
<p>While defining you vocabulary, try to think in term of other usage of your
|
||||
data, for example how using XSLT stylesheets could be used to make an HTML
|
||||
view of your data, or to convert it into a different format. Checking XML
|
||||
Schemas and looking at defining an XML Schema with a more complete
|
||||
validation and datatyping of your data structures is important, this helps
|
||||
avoiding some mistakes in the design phase.</p>
|
||||
|
||||
<h3>Namespace:</h3>
|
||||
|
||||
<p>If you expect your XML vocabulary to be used or recognized outside of your
|
||||
application (for example binding a specific processing from a graphic shell
|
||||
like Nautilus to an instance of your data) then you should really define an <a
|
||||
href="http://www.w3.org/TR/REC-xml-names/">XML namespace</a> for your
|
||||
vocabulary. A namespace name is an URL (absolute URI more precisely). It is
|
||||
generally recommended to anchor it as an HTTP resource to a server associated
|
||||
with the software project. See the next section about this. In practice this
|
||||
will mean that XML parsers will not handle your element names as-is but as a
|
||||
couple based on the namespace name and the element name. This allows it to
|
||||
recognize and disambiguate processing. Unicity of the namespace name can be
|
||||
for the most part guaranteed by the use of the DNS registry. Namespace can
|
||||
also be used to carry versioning information like:</p>
|
||||
|
||||
<p><code>"http://www.gnome.org/project/projectname/1.0/"</code></p>
|
||||
|
||||
<p>An easy way to use them is to make them the default namespace on the
|
||||
root element of the XML instance like:</p>
|
||||
<pre><structure xmlns="http://www.gnome.org/project/projectname/1.0/">
|
||||
<data>
|
||||
...
|
||||
</data>
|
||||
</structure></pre>
|
||||
|
||||
<p>In that document, structure and all descendant elements like data are in
|
||||
the given namespace.</p>
|
||||
|
||||
<h2><a name="Canonical">Canonical URL</a></h2>
|
||||
|
||||
<p>As seen in the previous namespace section, while XML processing is not
|
||||
tied to the Web there is a natural synergy between both. XML was designed to
|
||||
be available on the Web, and keeping the infrastructure that way helps
|
||||
deploying the XML resources. The core of this issue is the notion of
|
||||
"Canonical URL" of an XML resource. The resource can be an XML document, a
|
||||
DTD, a stylesheet, a schema, or even non-XML data associated with an XML
|
||||
resource, the canonical URL is the URL where the "master" copy of that
|
||||
resource is expected to be present on the Web. Usually when processing XML a
|
||||
copy of the resource will be present on the local disk, maybe in
|
||||
/usr/share/xml or /usr/share/sgml maybe in /opt or even on C:\projectname\
|
||||
(horror !). The key point is that the way to name that resource should be
|
||||
independent of the actual place where it resides on disk if it is available,
|
||||
and the fact that the processing will still work if there is no local copy
|
||||
(and that the machine where the processing is connected to the Internet).</p>
|
||||
|
||||
<p>What this really means is that one should never use the local name of a
|
||||
resource to reference it but always use the canonical URL. For example in a
|
||||
DocBook instance the following should not be used:</p>
|
||||
<pre><!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"<br>
|
||||
|
||||
|
||||
"/usr/share/xml/docbook/4.2/docbookx.dtd"></pre>
|
||||
|
||||
<p>But always reference the canonical URL for the DTD:</p>
|
||||
<pre><!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"<br>
|
||||
|
||||
|
||||
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> </pre>
|
||||
|
||||
<p>Similarly, the document instance may reference the <a
|
||||
href="http://www.w3.org/TR/xslt">XSLT</a> stylesheets needed to process it to
|
||||
generate HTML, and the canonical URL should be used:</p>
|
||||
<pre><?xml-stylesheet
|
||||
href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"
|
||||
type="text/xsl"?></pre>
|
||||
|
||||
<p>Defining the canonical URL for the resources needed should obey a few
|
||||
simple rules similar to those used to design namespace names:</p>
|
||||
<ul>
|
||||
<li>use a DNS name you know is associated to the project and will be
|
||||
available on the long term</li>
|
||||
<li>within that server space, reserve the right to the subtree where you
|
||||
intend to keep those data</li>
|
||||
<li>version the URL so that multiple concurrent versions of the resources
|
||||
can be hosted simultaneously</li>
|
||||
</ul>
|
||||
|
||||
<h2><a name="Catalog">Catalog setup</a></h2>
|
||||
|
||||
<h3>How catalogs work:</h3>
|
||||
|
||||
<p>The catalogs are the technical mechanism which allow the XML processing
|
||||
tools to use a local copy of the resources if it is available even if the
|
||||
instance document references the canonical URL. <a
|
||||
href="http://www.oasis-open.org/committees/entity/">XML Catalogs</a> are
|
||||
anchored in the root catalog (usually <code>/etc/xml/catalog</code> or
|
||||
defined by the user). They are a tree of XML documents defining the mappings
|
||||
between the canonical naming space and the local installed ones, this can be
|
||||
seen as a static cache structure.</p>
|
||||
|
||||
<p>When the XML processor is asked to process a resource it will
|
||||
automatically test for a locally available version in the catalog, starting
|
||||
from the root catalog, and possibly fetching sub-catalog resources until it
|
||||
finds that the catalog has that resource or not. If not the default
|
||||
processing of fetching the resource from the Web is done, allowing in most
|
||||
case to recover from a catalog miss. The key point is that the document
|
||||
instances are totally independent of the availability of a catalog or from
|
||||
the actual place where the local resource they reference may be installed.
|
||||
This greatly improves the management of the documents in the long run, making
|
||||
them independent of the platform or toolchain used to process them. The
|
||||
figure below tries to express that mechanism:<img src="catalog.gif"
|
||||
alt="Picture describing the catalog "></p>
|
||||
|
||||
<h3>Usual catalog setup:</h3>
|
||||
|
||||
<p>Usually catalogs for a project are setup as a 2 level hierarchical cache,
|
||||
the root catalog containing only "delegates" indicating a separate subcatalog
|
||||
dedicated to the project. The goal is to keep the root catalog clean and
|
||||
simplify the maintenance of the catalog by using separate catalogs per
|
||||
project. For example when creating a catalog for the <a
|
||||
href="http://www.w3.org/TR/xhtml1">XHTML1</a> DTDs, only 3 items are added to
|
||||
the root catalog:</p>
|
||||
<pre> <delegatePublic publicIdStartString="-//W3C//DTD XHTML 1.0"
|
||||
catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/>
|
||||
<delegateSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD"
|
||||
catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/>
|
||||
<delegateURI uriStartString="http://www.w3.org/TR/xhtml1/DTD"
|
||||
catalog="file:///usr/share/sgml/xhtml1/xmlcatalog"/></pre>
|
||||
|
||||
<p>They are all "delegates" meaning that if the catalog system is asked to
|
||||
resolve a reference corresponding to them, it has to lookup a sub catalog.
|
||||
Here the subcatalog was installed as
|
||||
<code>/usr/share/sgml/xhtml1/xmlcatalog</code> in the local tree. That
|
||||
decision is left to the sysadmin or the packager for that system and may
|
||||
obey different rules, but the actual place on the filesystem (or on a
|
||||
resource cache on the local network) will not influence the processing as
|
||||
long as it is available. The first rule indicate that if the reference uses a
|
||||
PUBLIC identifier beginning with the</p>
|
||||
|
||||
<p><code>"-//W3C//DTD XHTML 1.0"</code></p>
|
||||
|
||||
<p>substring, then the catalog lookup should be limited to the specific given
|
||||
lookup catalog. Similarly the second and third entries indicate those
|
||||
delegation rules for SYSTEM, DOCTYPE or normal URI references when the URL
|
||||
starts with the <code>"http://www.w3.org/TR/xhtml1/DTD"</code> substring
|
||||
which indicates the location on the W3C server where the XHTML1 resources are
|
||||
stored. Those are the beginning of all Canonical URLs for XHTML1 resources.
|
||||
Those three rules are sufficient in practice to capture all references to XHTML1
|
||||
resources and direct the processing tools to the right subcatalog.</p>
|
||||
|
||||
<h3>A subcatalog example:</h3>
|
||||
|
||||
<p>Here is the complete subcatalog used for XHTML1:</p>
|
||||
<pre><?xml version="1.0"?>
|
||||
<!DOCTYPE catalog PUBLIC "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
|
||||
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
|
||||
<public publicId="-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
uri="xhtml1-20020801/DTD/xhtml1-strict.dtd"/>
|
||||
<public publicId="-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
uri="xhtml1-20020801/DTD/xhtml1-transitional.dtd"/>
|
||||
<public publicId="-//W3C//DTD XHTML 1.0 Frameset//EN"
|
||||
uri="xhtml1-20020801/DTD/xhtml1-frameset.dtd"/>
|
||||
<rewriteSystem systemIdStartString="http://www.w3.org/TR/xhtml1/DTD"
|
||||
rewritePrefix="xhtml1-20020801/DTD"/>
|
||||
<rewriteURI uriStartString="http://www.w3.org/TR/xhtml1/DTD"
|
||||
rewritePrefix="xhtml1-20020801/DTD"/>
|
||||
</catalog></pre>
|
||||
|
||||
<p>There are a few things to notice:</p>
|
||||
<ul>
|
||||
<li>this is an XML resource, it points to the DTD using Canonical URLs, the
|
||||
root element defines a namespace (but based on an URN not an HTTP
|
||||
URL).</li>
|
||||
<li>it contains 5 rules, the 3 first ones are direct mapping for the 3
|
||||
PUBLIC identifiers defined by the XHTML1 specification and associating
|
||||
them with the local resource containing the DTD, the 2 last ones are
|
||||
rewrite rules allowing to build the local filename for any URL based on
|
||||
"http://www.w3.org/TR/xhtml1/DTD", the local cache simplifies the rules by
|
||||
keeping the same structure as the on-line server at the Canonical URL</li>
|
||||
<li>the local resources are designated using URI references (the uri or
|
||||
rewritePrefix attributes), the base being the containing sub-catalog URL,
|
||||
which means that in practice the copy of the XHTML1 strict DTD is stored
|
||||
locally in
|
||||
<code>/usr/share/sgml/xhtml1/xmlcatalog/xhtml1-20020801/DTD/xhtml1-strict.dtd</code></li>
|
||||
</ul>
|
||||
|
||||
<p>Those 5 rules are sufficient to cover all references to the resources held
|
||||
at the Canonical URL for the XHTML1 DTDs.</p>
|
||||
|
||||
<h2><a name="Package">Package integration</a></h2>
|
||||
|
||||
<p>Creating and removing catalogs should be handled as part of the process of
|
||||
(un)installing the local copy of the resources. The catalog files being XML
|
||||
resources should be processed with XML based tools to avoid problems with the
|
||||
generated files, the xmlcatalog command coming with libxml2 allows you to create
|
||||
catalogs, and add or remove rules at that time. Here is a complete example
|
||||
coming from the RPM for the XHTML1 DTDs post install script. While this example
|
||||
is platform and packaging specific, this can be useful as a an example in
|
||||
other contexts:</p>
|
||||
<pre>%post
|
||||
CATALOG=/usr/share/sgml/xhtml1/xmlcatalog
|
||||
#
|
||||
# Register it in the super catalog with the appropriate delegates
|
||||
#
|
||||
ROOTCATALOG=/etc/xml/catalog
|
||||
|
||||
if [ ! -r $ROOTCATALOG ]
|
||||
then
|
||||
/usr/bin/xmlcatalog --noout --create $ROOTCATALOG
|
||||
fi
|
||||
|
||||
if [ -w $ROOTCATALOG ]
|
||||
then
|
||||
/usr/bin/xmlcatalog --noout --add "delegatePublic" \
|
||||
"-//W3C//DTD XHTML 1.0" \
|
||||
"file://$CATALOG" $ROOTCATALOG
|
||||
/usr/bin/xmlcatalog --noout --add "delegateSystem" \
|
||||
"http://www.w3.org/TR/xhtml1/DTD" \
|
||||
"file://$CATALOG" $ROOTCATALOG
|
||||
/usr/bin/xmlcatalog --noout --add "delegateURI" \
|
||||
"http://www.w3.org/TR/xhtml1/DTD" \
|
||||
"file://$CATALOG" $ROOTCATALOG
|
||||
fi</pre>
|
||||
|
||||
<p>The XHTML1 subcatalog is not created on-the-fly in that case, it is
|
||||
installed as part of the files of the packages. So the only work needed is to
|
||||
make sure the root catalog exists and register the delegate rules.</p>
|
||||
|
||||
<p>Similarly, the script for the post-uninstall just remove the rules from the
|
||||
catalog:</p>
|
||||
<pre>%postun
|
||||
#
|
||||
# On removal, unregister the xmlcatalog from the supercatalog
|
||||
#
|
||||
if [ "$1" = 0 ]; then
|
||||
CATALOG=/usr/share/sgml/xhtml1/xmlcatalog
|
||||
ROOTCATALOG=/etc/xml/catalog
|
||||
|
||||
if [ -w $ROOTCATALOG ]
|
||||
then
|
||||
/usr/bin/xmlcatalog --noout --del \
|
||||
"-//W3C//DTD XHTML 1.0" $ROOTCATALOG
|
||||
/usr/bin/xmlcatalog --noout --del \
|
||||
"http://www.w3.org/TR/xhtml1/DTD" $ROOTCATALOG
|
||||
/usr/bin/xmlcatalog --noout --del \
|
||||
"http://www.w3.org/TR/xhtml1/DTD" $ROOTCATALOG
|
||||
fi
|
||||
fi</pre>
|
||||
|
||||
<p>Note the test against $1, this is needed to not remove the delegate rules
|
||||
in case of upgrade of the package.</p>
|
||||
|
||||
<p>Following the set of guidelines and tips provided in this document should
|
||||
help deploy the XML resources in the GNOME framework without much pain and
|
||||
ensure a smooth evolution of the resource and instances.</p>
|
||||
|
||||
<p><a href="mailto:[email protected]">Daniel Veillard</a></p>
|
||||
|
||||
<p>$Id: guidelines.html,v 1.6 2004/12/26 21:01:48 veillard Exp $</p>
|
||||
|
||||
<p></p>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,25 +0,0 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><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>How to help</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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 parser and toolkit of Gnome</h1><h2>How to help</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"><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="index.html">Home</a></li><li><a href="http://xmlsoft.org/wiki">Wiki</a></li><li><a href="html/index.html">Reference Manual</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</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">Releases</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation & DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://www.blastwave.org/packages.php/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://rubyforge.org/projects/xml-tools/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?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>You can help the project in various ways, the best thing to do first is to
|
||||
subscribe to the mailing-list as explained before, check the <a href="http://mail.gnome.org/archives/xml/">archives </a>and the <a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Gnome bug
|
||||
database</a>:</p><ol><li>Provide patches when you find problems.</li>
|
||||
<li>Provide the diffs when you port libxml2 to a new platform. They may not
|
||||
be integrated in all cases but help pinpointing portability problems
|
||||
and</li>
|
||||
<li>Provide documentation fixes (either as patches to the code comments or
|
||||
as HTML diffs).</li>
|
||||
<li>Provide new documentations pieces (translations, examples, etc
|
||||
...).</li>
|
||||
<li>Check the TODO file and try to close one of the items.</li>
|
||||
<li>Take one of the points raised in the archive or the bug database and
|
||||
provide a fix. <a href="mailto:[email protected]">Get in touch with me
|
||||
</a>before to avoid synchronization problems and check that the suggested
|
||||
fix will fit in nicely :-)</li>
|
||||
</ol><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>
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 654 B |
File diff suppressed because one or more lines are too long
Binary file not shown.
|
Before Width: | Height: | Size: 459 B |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user