mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2024-12-25 23:21:26 +03:00
possible mem leak patch from Jason Adams integrated xf:escape-uri() from
* xpath.c: possible mem leak patch from Jason Adams * xpath.c: integrated xf:escape-uri() from Wesley Terpstra in the XQuery namespace * configure.in: preparing 2.4.24 * doc/*.html: updated the web pages * python/generator.py: closing bug #85258 by generating conditional compile check to avoid linking to routines not configured in. Daniel
This commit is contained in:
parent
84ec40a51c
commit
42766c0eea
16
ChangeLog
16
ChangeLog
@ -1,3 +1,19 @@
|
||||
Thu Aug 22 22:03:19 CEST 2002 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* xpath.c: possible mem leak patch from Jason Adams
|
||||
|
||||
Thu Aug 22 17:27:30 CEST 2002 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* xpath.c: integrated xf:escape-uri() from Wesley Terpstra
|
||||
in the XQuery namespace
|
||||
* configure.in: preparing 2.4.24
|
||||
* doc/*.html: updated the web pages
|
||||
|
||||
Thu Aug 22 16:19:42 CEST 2002 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* python/generator.py: closing bug #85258 by generating conditional
|
||||
compile check to avoid linking to routines not configured in.
|
||||
|
||||
2002-08-22 Havoc Pennington <hp@pobox.com>
|
||||
|
||||
* autogen.sh: update error message for missing automake
|
||||
|
@ -6,7 +6,7 @@ AC_CANONICAL_HOST
|
||||
|
||||
LIBXML_MAJOR_VERSION=2
|
||||
LIBXML_MINOR_VERSION=4
|
||||
LIBXML_MICRO_VERSION=23
|
||||
LIBXML_MICRO_VERSION=24
|
||||
LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION
|
||||
LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION
|
||||
|
||||
|
47
doc/FAQ.html
47
doc/FAQ.html
@ -105,9 +105,9 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
</li>
|
||||
<li>
|
||||
<em>Can I embed libxml 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
|
||||
<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>
|
||||
@ -128,8 +128,8 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
<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 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>
|
||||
@ -145,8 +145,8 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
<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
|
||||
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>
|
||||
@ -156,9 +156,9 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
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
|
||||
<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>
|
||||
@ -197,17 +197,18 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
</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 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>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>
|
||||
@ -293,8 +294,8 @@ pnode=pxmlDoc->children->children;</pre>
|
||||
patches.</p>
|
||||
</li>
|
||||
<li>
|
||||
<em>Where can I get more examples and information than privoded on the web
|
||||
page?</em>
|
||||
<em>Where can I get more examples and information than privoded on the
|
||||
web page?</em>
|
||||
<p>Ideally a libxml book would be nice. I have no such plan ... But you
|
||||
can:</p>
|
||||
<ul>
|
||||
@ -311,9 +312,9 @@ pnode=pxmlDoc->children->children;</pre>
|
||||
<li>
|
||||
<a href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&dir=gnome-xml">Browse
|
||||
the libxml 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>
|
||||
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++ ?
|
||||
@ -336,8 +337,8 @@ pnode=pxmlDoc->children->children;</pre>
|
||||
</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>
|
||||
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 */
|
||||
|
@ -104,18 +104,19 @@ document</a>:</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>
|
||||
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>
|
||||
|
@ -93,8 +93,8 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
<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 being developed on top of libxml2. This
|
||||
module "libxslt" too can be found in the Gnome CVS base.</p>
|
||||
<p>A separate library called libxslt is being developed on top of 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">Changelog</a>.</p>
|
||||
<p><a href="bugs.html">Daniel Veillard</a></p>
|
||||
|
@ -90,9 +90,9 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
<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=libxml">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>
|
||||
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>There is also a mailing-list <a href="mailto:xml@gnome.org">xml@gnome.org</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>
|
||||
|
@ -106,9 +106,9 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
for IBM developerWorks</a> about using libxml.</li>
|
||||
<li>Check <a href="http://cvs.gnome.org/lxr/source/gnome-xml/TODO">the TODO
|
||||
file</a>.</li>
|
||||
<li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a> description. If you are
|
||||
starting a new project using libxml you should really use the 2.x
|
||||
version.</li>
|
||||
<li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a>
|
||||
description. If you are starting a new project using libxml you should
|
||||
really use the 2.x version.</li>
|
||||
<li>And don't forget to look at the <a href="http://mail.gnome.org/archives/xml/">mailing-list archive</a>.</li>
|
||||
</ol>
|
||||
<p><a href="bugs.html">Daniel Veillard</a></p>
|
||||
|
@ -96,7 +96,9 @@ packages installed to compile applications using libxml.) <a href="mailto:igor@s
|
||||
maintainer of the Windows port, <a href="http://www.fh-frankfurt.de/~igor/projects/libxml/index.html">he
|
||||
provides binaries</a>. <a href="mailto:Gary.Pennington@sun.com">Gary
|
||||
Pennington</a> provides <a href="http://garypennington.net/libxml2/">Solaris
|
||||
binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides <a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X binaries</a>.</p>
|
||||
binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides
|
||||
<a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X
|
||||
binaries</a>.</p>
|
||||
<p><a name="Snapshot">Snapshot:</a></p>
|
||||
<ul>
|
||||
<li>Code from the W3C cvs base libxml <a href="ftp://xmlsoft.org/cvs-snapshot.tar.gz">cvs-snapshot.tar.gz</a>.</li>
|
||||
|
@ -97,7 +97,8 @@ database</a>:</p>
|
||||
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>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:daniel@veillard.com">Get in touch with me
|
||||
|
@ -126,7 +126,8 @@ languages:</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p>In most cases libxml tries to implement the specifications in a relatively
|
||||
strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests from the <a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
|
||||
strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests
|
||||
from the <a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
|
||||
Suite</a>.</p>
|
||||
<p>To some extent libxml2 provides support for the following additional
|
||||
specifications but doesn't claim to implement them completely:</p>
|
||||
|
@ -96,6 +96,17 @@ to test those</p>
|
||||
Schemas</a> and <a href="http://www.w3.org/TR/xinclude">XInclude</a>
|
||||
</li>
|
||||
</ul>
|
||||
<p><strong>2.4.24: Aug 22 2002</strong></p>
|
||||
<ul>
|
||||
<li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
|
||||
<li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
|
||||
(fcrozat)</li>
|
||||
<li>HTML <style> and boolean attributes serializer fixes</li>
|
||||
<li>C14N improvements by Aleksey</li>
|
||||
<li>doc cleanups: Rick Jones </li>
|
||||
<li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
|
||||
<li>XInclude: implementation of fallback and xml:base fixup added</li>
|
||||
</ul>
|
||||
<h3>2.4.23: July 6 2002</h3>
|
||||
<ul>
|
||||
<li>performances patches: Peter Jacobi</li>
|
||||
|
@ -87,8 +87,8 @@ A:link, A:visited, A:active { text-decoration: underline }
|
||||
</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>There are a number of language bindings and wrappers available for libxml2,
|
||||
the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
|
||||
<p>There are a number of language bindings and wrappers available for
|
||||
libxml2, the list below is not exhaustive. Please contact the <a href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
|
||||
(<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
|
||||
order to get updates to this list or to discuss the specific topic of libxml2
|
||||
or libxslt wrappers or bindings:</p>
|
||||
|
137
doc/xml.html
137
doc/xml.html
@ -58,7 +58,8 @@ languages:</p>
|
||||
</ul>
|
||||
|
||||
<p>In most cases libxml tries to implement the specifications in a relatively
|
||||
strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests from the <a
|
||||
strictly compliant way. As of release 2.4.16, libxml2 passes all 1800+ tests
|
||||
from the <a
|
||||
href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
|
||||
Suite</a>.</p>
|
||||
|
||||
@ -159,9 +160,9 @@ libxml2</p>
|
||||
wording</p>
|
||||
</li>
|
||||
<li><em>Can I embed libxml 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
|
||||
<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>
|
||||
@ -182,8 +183,8 @@ libxml2</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 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
|
||||
@ -202,8 +203,8 @@ libxml2</p>
|
||||
</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
|
||||
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>
|
||||
@ -212,9 +213,9 @@ libxml2</p>
|
||||
<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
|
||||
<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>
|
||||
@ -253,16 +254,17 @@ libxml2</p>
|
||||
</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 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>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>
|
||||
@ -345,8 +347,8 @@ pnode=pxmlDoc->children->children;</pre>
|
||||
<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 privoded on the web
|
||||
page?</em>
|
||||
<li><em>Where can I get more examples and information than privoded on the
|
||||
web page?</em>
|
||||
<p>Ideally a libxml book would be nice. I have no such plan ... But you
|
||||
can:</p>
|
||||
<ul>
|
||||
@ -363,9 +365,9 @@ pnode=pxmlDoc->children->children;</pre>
|
||||
<li><a
|
||||
href="http://cvs.gnome.org/bonsai/rview.cgi?cvsroot=/cvs/gnome&dir=gnome-xml">Browse
|
||||
the libxml 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>
|
||||
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++ ?
|
||||
@ -388,8 +390,8 @@ pnode=pxmlDoc->children->children;</pre>
|
||||
</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
|
||||
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>
|
||||
@ -430,9 +432,9 @@ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
|
||||
for IBM developerWorks</a> about using libxml.</li>
|
||||
<li>Check <a href="http://cvs.gnome.org/lxr/source/gnome-xml/TODO">the TODO
|
||||
file</a>.</li>
|
||||
<li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a> description. If you are
|
||||
starting a new project using libxml you should really use the 2.x
|
||||
version.</li>
|
||||
<li>Read the <a href="upgrade.html">1.x to 2.x upgrade path</a>
|
||||
description. If you are starting a new project using libxml you should
|
||||
really use the 2.x version.</li>
|
||||
<li>And don't forget to look at the <a
|
||||
href="http://mail.gnome.org/archives/xml/">mailing-list archive</a>.</li>
|
||||
</ol>
|
||||
@ -442,9 +444,9 @@ xmlDtdPtr dtd = xmlParseDTD(NULL, filename_of_dtd); /* parse the DTD */
|
||||
<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=libxml">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>
|
||||
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>There is also a mailing-list <a
|
||||
href="mailto:xml@gnome.org">xml@gnome.org</a> for libxml, with an <a
|
||||
@ -502,7 +504,8 @@ database</a>:</p>
|
||||
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>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:daniel@veillard.com">Get in touch with me
|
||||
@ -531,7 +534,9 @@ maintainer of the Windows port, <a
|
||||
href="http://www.fh-frankfurt.de/~igor/projects/libxml/index.html">he
|
||||
provides binaries</a>. <a href="mailto:Gary.Pennington@sun.com">Gary
|
||||
Pennington</a> provides <a href="http://garypennington.net/libxml2/">Solaris
|
||||
binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides <a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X binaries</a>.</p>
|
||||
binaries</a>. <a href="mailto:Steve.Ball@zveno.com">Steve Ball</a> provides
|
||||
<a href="http://www.zveno.com/open_source/libxml2xslt.html">Mac Os X
|
||||
binaries</a>.</p>
|
||||
|
||||
<p><a name="Snapshot">Snapshot:</a></p>
|
||||
<ul>
|
||||
@ -572,6 +577,18 @@ to test those</p>
|
||||
Schemas</a> and <a href="http://www.w3.org/TR/xinclude">XInclude</a></li>
|
||||
</ul>
|
||||
|
||||
<p><strong>2.4.24: Aug 22 2002</strong></p>
|
||||
<ul>
|
||||
<li>XPath fixes (William), xf:escape-uri() (Wesley Terpstra)</li>
|
||||
<li>Python binding fixes: makefiles (William), generator, rpm build, x86-64
|
||||
(fcrozat)</li>
|
||||
<li>HTML <style> and boolean attributes serializer fixes</li>
|
||||
<li>C14N improvements by Aleksey</li>
|
||||
<li>doc cleanups: Rick Jones </li>
|
||||
<li>Windows compiler makefile updates: Igor and Elizabeth Barham</li>
|
||||
<li>XInclude: implementation of fallback and xml:base fixup added</li>
|
||||
</ul>
|
||||
|
||||
<h3>2.4.23: July 6 2002</h3>
|
||||
<ul>
|
||||
<li>performances patches: Peter Jacobi</li>
|
||||
@ -1370,19 +1387,20 @@ document</a>:</p>
|
||||
</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>
|
||||
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>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>
|
||||
|
||||
<h2><a name="XSLT">XSLT</a></h2>
|
||||
|
||||
@ -1392,8 +1410,8 @@ it is used to encode remote calls between a client and a server.</p>
|
||||
language for transforming XML documents into other XML documents (or
|
||||
HTML/textual output).</p>
|
||||
|
||||
<p>A separate library called libxslt is being developed on top of libxml2. This
|
||||
module "libxslt" too can be found in the Gnome CVS base.</p>
|
||||
<p>A separate library called libxslt is being developed on top of 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>
|
||||
@ -1403,8 +1421,8 @@ name="Changelog">Changelog</a>.</p>
|
||||
|
||||
<h2><a name="Python">Python and bindings</a></h2>
|
||||
|
||||
<p>There are a number of language bindings and wrappers available for libxml2,
|
||||
the list below is not exhaustive. Please contact the <a
|
||||
<p>There are a number of language bindings and wrappers available for
|
||||
libxml2, the list below is not exhaustive. Please contact the <a
|
||||
href="http://mail.gnome.org/mailman/listinfo/xml-bindings">xml-bindings@gnome.org</a>
|
||||
(<a href="http://mail.gnome.org/archives/xml-bindings/">archives</a>) in
|
||||
order to get updates to this list or to discuss the specific topic of libxml2
|
||||
@ -1897,8 +1915,8 @@ of the XML life cycle. Briefly a DTD defines all the possible elements to be
|
||||
found within your document, what is the formal shape of your document tree
|
||||
(by defining the allowed content of an element; either text, a regular
|
||||
expression for the allowed list of children, or mixed content i.e. both text
|
||||
and children). The DTD also defines the valid attributes for all elements
|
||||
and the types of those attributes.</p>
|
||||
and children). The DTD also defines the valid attributes for all elements and
|
||||
the types of those attributes.</p>
|
||||
|
||||
<h3><a name="definition1">The definition</a></h3>
|
||||
|
||||
@ -1917,10 +1935,10 @@ ancient...</p>
|
||||
|
||||
<h3><a name="Simple1">Simple rules</a></h3>
|
||||
|
||||
<p>Writing DTDs can be done in many ways. The rules to build them if you
|
||||
need something permanent or something which can evolve over time can be radically
|
||||
different. Really complex DTDs like DocBook ones are flexible but quite harder
|
||||
to design. I will just focus on DTDs for a formats with a fixed simple
|
||||
<p>Writing DTDs can be done in many ways. The rules to build them if you need
|
||||
something permanent or something which can evolve over time can be radically
|
||||
different. Really complex DTDs like DocBook ones are flexible but quite
|
||||
harder to design. I will just focus on DTDs for a formats with a fixed simple
|
||||
structure. It is just a set of basic rules, and definitely not exhaustive nor
|
||||
usable for complex DTD design.</p>
|
||||
|
||||
@ -2027,9 +2045,9 @@ meaning that it is optional, or the default value (possibly prefixed by
|
||||
<h3><a name="Some1">Some examples</a></h3>
|
||||
|
||||
<p>The directory <code>test/valid/dtds/</code> in the libxml distribution
|
||||
contains some complex DTD examples. The example in the file <code>test/valid/dia.xml</code>
|
||||
shows an XML file where the simple DTD is directly included within
|
||||
the document.</p>
|
||||
contains some complex DTD examples. The example in the file
|
||||
<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
|
||||
directly included within the document.</p>
|
||||
|
||||
<h3><a name="validate1">How to validate</a></h3>
|
||||
|
||||
@ -2042,8 +2060,8 @@ For example the following validates a copy of the first revision of the XML
|
||||
|
||||
<p>the -- noout is used to disable output of the resulting tree.</p>
|
||||
|
||||
<p>The <code>--dtdvalid dtd</code> allows validation of the document(s) against
|
||||
a given DTD.</p>
|
||||
<p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
|
||||
against a given DTD.</p>
|
||||
|
||||
<p>Libxml exports an API to handle DTDs and validation, check the <a
|
||||
href="http://xmlsoft.org/html/libxml-valid.html">associated
|
||||
@ -2644,6 +2662,7 @@ xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) {
|
||||
|
||||
|
||||
|
||||
|
||||
} </pre>
|
||||
</li>
|
||||
<li>And then use it to save the document:
|
||||
|
@ -116,8 +116,8 @@ of the XML life cycle. Briefly a DTD defines all the possible elements to be
|
||||
found within your document, what is the formal shape of your document tree
|
||||
(by defining the allowed content of an element; either text, a regular
|
||||
expression for the allowed list of children, or mixed content i.e. both text
|
||||
and children). The DTD also defines the valid attributes for all elements
|
||||
and the types of those attributes.</p>
|
||||
and children). The DTD also defines the valid attributes for all elements and
|
||||
the types of those attributes.</p>
|
||||
<h3><a name="definition1">The definition</a></h3>
|
||||
<p>The <a href="http://www.w3.org/TR/REC-xml">W3C XML Recommendation</a> (<a href="http://www.xml.com/axml/axml.html">Tim Bray's annotated version of
|
||||
Rev1</a>):</p>
|
||||
@ -130,10 +130,10 @@ Rev1</a>):</p>
|
||||
<p>(unfortunately) all this is inherited from the SGML world, the syntax is
|
||||
ancient...</p>
|
||||
<h3><a name="Simple1">Simple rules</a></h3>
|
||||
<p>Writing DTDs can be done in many ways. The rules to build them if you
|
||||
need something permanent or something which can evolve over time can be radically
|
||||
different. Really complex DTDs like DocBook ones are flexible but quite harder
|
||||
to design. I will just focus on DTDs for a formats with a fixed simple
|
||||
<p>Writing DTDs can be done in many ways. The rules to build them if you need
|
||||
something permanent or something which can evolve over time can be radically
|
||||
different. Really complex DTDs like DocBook ones are flexible but quite
|
||||
harder to design. I will just focus on DTDs for a formats with a fixed simple
|
||||
structure. It is just a set of basic rules, and definitely not exhaustive nor
|
||||
usable for complex DTD design.</p>
|
||||
<h4>
|
||||
@ -218,9 +218,9 @@ meaning that it is optional, or the default value (possibly prefixed by
|
||||
</ul>
|
||||
<h3><a name="Some1">Some examples</a></h3>
|
||||
<p>The directory <code>test/valid/dtds/</code> in the libxml distribution
|
||||
contains some complex DTD examples. The example in the file <code>test/valid/dia.xml</code>
|
||||
shows an XML file where the simple DTD is directly included within
|
||||
the document.</p>
|
||||
contains some complex DTD examples. The example in the file
|
||||
<code>test/valid/dia.xml</code> shows an XML file where the simple DTD is
|
||||
directly included within the document.</p>
|
||||
<h3><a name="validate1">How to validate</a></h3>
|
||||
<p>The simplest way is to use the xmllint program included with libxml. The
|
||||
<code>--valid</code> option turns-on validation of the files given as input.
|
||||
@ -228,8 +228,8 @@ For example the following validates a copy of the first revision of the XML
|
||||
1.0 specification:</p>
|
||||
<p><code>xmllint --valid --noout test/valid/REC-xml-19980210.xml</code></p>
|
||||
<p>the -- noout is used to disable output of the resulting tree.</p>
|
||||
<p>The <code>--dtdvalid dtd</code> allows validation of the document(s) against
|
||||
a given DTD.</p>
|
||||
<p>The <code>--dtdvalid dtd</code> allows validation of the document(s)
|
||||
against a given DTD.</p>
|
||||
<p>Libxml exports an API to handle DTDs and validation, check the <a href="http://xmlsoft.org/html/libxml-valid.html">associated
|
||||
description</a>.</p>
|
||||
<h3><a name="Other1">Other resources</a></h3>
|
||||
|
@ -238,6 +238,7 @@ xmlOutputBufferCreateOwn(FILE *file, xmlCharEncodingHandlerPtr encoder) {
|
||||
|
||||
|
||||
|
||||
|
||||
} </pre>
|
||||
</li>
|
||||
<li>And then use it to save the document:
|
||||
|
@ -27,21 +27,21 @@ extern void xmlCheckVersion(int version);
|
||||
*
|
||||
* the version string like "1.2.3"
|
||||
*/
|
||||
#define LIBXML_DOTTED_VERSION "2.4.23"
|
||||
#define LIBXML_DOTTED_VERSION "2.4.24"
|
||||
|
||||
/**
|
||||
* LIBXML_VERSION:
|
||||
*
|
||||
* the version number: 1.2.3 value is 1002003
|
||||
*/
|
||||
#define LIBXML_VERSION 20423
|
||||
#define LIBXML_VERSION 20424
|
||||
|
||||
/**
|
||||
* LIBXML_VERSION_STRING:
|
||||
*
|
||||
* the version number string, 1.2.3 value is "1002003"
|
||||
*/
|
||||
#define LIBXML_VERSION_STRING "20423"
|
||||
#define LIBXML_VERSION_STRING "20424"
|
||||
|
||||
/**
|
||||
* LIBXML_TEST_VERSION:
|
||||
@ -49,7 +49,7 @@ extern void xmlCheckVersion(int version);
|
||||
* Macro to check that the libxml version in use is compatible with
|
||||
* the version the software has been compiled against
|
||||
*/
|
||||
#define LIBXML_TEST_VERSION xmlCheckVersion(20423);
|
||||
#define LIBXML_TEST_VERSION xmlCheckVersion(20424);
|
||||
|
||||
#if 0
|
||||
/**
|
||||
|
2
parser.c
2
parser.c
@ -9794,7 +9794,7 @@ xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax,
|
||||
if (doc == NULL) {
|
||||
ctxt->myDoc = newDoc;
|
||||
} else {
|
||||
ctxt->myDoc = doc;
|
||||
ctxt->myDoc = newDoc;
|
||||
newDoc->children->doc = doc;
|
||||
}
|
||||
ctxt->instate = XML_PARSER_CONTENT;
|
||||
|
@ -383,6 +383,31 @@ def print_function_wrapper(name, output, export, include):
|
||||
unknown_types[ret[0]] = [name]
|
||||
return -1
|
||||
|
||||
if file == "debugXML":
|
||||
include.write("#ifdef LIBXML_DEBUG_ENABLED\n");
|
||||
export.write("#ifdef LIBXML_DEBUG_ENABLED\n");
|
||||
output.write("#ifdef LIBXML_DEBUG_ENABLED\n");
|
||||
elif file == "HTMLtree" or file == "HTMLparser":
|
||||
include.write("#ifdef LIBXML_HTML_ENABLED\n");
|
||||
export.write("#ifdef LIBXML_HTML_ENABLED\n");
|
||||
output.write("#ifdef LIBXML_HTML_ENABLED\n");
|
||||
elif file == "c14n":
|
||||
include.write("#ifdef LIBXML_C14N_ENABLED\n");
|
||||
export.write("#ifdef LIBXML_C14N_ENABLED\n");
|
||||
output.write("#ifdef LIBXML_C14N_ENABLED\n");
|
||||
elif file == "xpathInternals" or file == "xpath":
|
||||
include.write("#ifdef LIBXML_XPATH_ENABLED\n");
|
||||
export.write("#ifdef LIBXML_XPATH_ENABLED\n");
|
||||
output.write("#ifdef LIBXML_XPATH_ENABLED\n");
|
||||
elif file == "xpointer":
|
||||
include.write("#ifdef LIBXML_XPTR_ENABLED\n");
|
||||
export.write("#ifdef LIBXML_XPTR_ENABLED\n");
|
||||
output.write("#ifdef LIBXML_XPTR_ENABLED\n");
|
||||
elif file == "xinclude":
|
||||
include.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
|
||||
export.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
|
||||
output.write("#ifdef LIBXML_XINCLUDE_ENABLED\n");
|
||||
|
||||
include.write("PyObject * ")
|
||||
include.write("libxml_%s(PyObject *self, PyObject *args);\n" % (name));
|
||||
|
||||
@ -417,6 +442,30 @@ def print_function_wrapper(name, output, export, include):
|
||||
output.write(c_call)
|
||||
output.write(ret_convert)
|
||||
output.write("}\n\n")
|
||||
if file == "debugXML":
|
||||
include.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
|
||||
export.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
|
||||
output.write("#endif /* LIBXML_DEBUG_ENABLED */\n");
|
||||
elif file == "HTMLtree" or file == "HTMLparser":
|
||||
include.write("#endif /* LIBXML_HTML_ENABLED */\n");
|
||||
export.write("#endif /* LIBXML_HTML_ENABLED */\n");
|
||||
output.write("#endif /* LIBXML_HTML_ENABLED */\n");
|
||||
elif file == "c14n":
|
||||
include.write("#endif /* LIBXML_C14N_ENABLED */\n");
|
||||
export.write("#endif /* LIBXML_C14N_ENABLED */\n");
|
||||
output.write("#endif /* LIBXML_C14N_ENABLED */\n");
|
||||
elif file == "xpathInternals" or file == "xpath":
|
||||
include.write("#endif /* LIBXML_XPATH_ENABLED */\n");
|
||||
export.write("#endif /* LIBXML_XPATH_ENABLED */\n");
|
||||
output.write("#endif /* LIBXML_XPATH_ENABLED */\n");
|
||||
elif file == "xpointer":
|
||||
include.write("#endif /* LIBXML_XPTR_ENABLED */\n");
|
||||
export.write("#endif /* LIBXML_XPTR_ENABLED */\n");
|
||||
output.write("#endif /* LIBXML_XPTR_ENABLED */\n");
|
||||
elif file == "xinclude":
|
||||
include.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
|
||||
export.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
|
||||
output.write("#endif /* LIBXML_XINCLUDE_ENABLED */\n");
|
||||
return 1
|
||||
|
||||
def buildStubs():
|
||||
|
@ -49,9 +49,11 @@ int main(int argc, char **argv) {
|
||||
xmlSchemaPtr schema = NULL;
|
||||
|
||||
for (i = 1; i < argc ; i++) {
|
||||
#ifdef LIBXML_DEBUG_ENABLED
|
||||
if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
|
||||
debug++;
|
||||
else
|
||||
#endif
|
||||
if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
|
||||
noout++;
|
||||
}
|
||||
@ -69,8 +71,10 @@ int main(int argc, char **argv) {
|
||||
stderr);
|
||||
schema = xmlSchemaParse(ctxt);
|
||||
xmlSchemaFreeParserCtxt(ctxt);
|
||||
#ifdef LIBXML_DEBUG_ENABLED
|
||||
if (debug)
|
||||
xmlSchemaDump(stdout, schema);
|
||||
#endif
|
||||
} else {
|
||||
xmlDocPtr doc;
|
||||
|
||||
@ -109,7 +113,9 @@ int main(int argc, char **argv) {
|
||||
printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
|
||||
argv[0]);
|
||||
printf("\tParse the HTML files and output the result of the parsing\n");
|
||||
#ifdef LIBXML_DEBUG_ENABLED
|
||||
printf("\t--debug : dump a debug tree of the in-memory document\n");
|
||||
#endif
|
||||
printf("\t--noout : do not print the result\n");
|
||||
}
|
||||
xmlSchemaCleanupTypes();
|
||||
|
121
xpath.c
121
xpath.c
@ -2825,7 +2825,7 @@ xmlXPathRegisterNs(xmlXPathContextPtr ctxt, const xmlChar *prefix,
|
||||
ctxt->nsHash = xmlHashCreate(10);
|
||||
if (ctxt->nsHash == NULL)
|
||||
return(-1);
|
||||
return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) ns_uri,
|
||||
return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) xmlStrdup(ns_uri),
|
||||
(xmlHashDeallocator)xmlFree));
|
||||
}
|
||||
|
||||
@ -2875,7 +2875,7 @@ xmlXPathRegisteredNsCleanup(xmlXPathContextPtr ctxt) {
|
||||
if (ctxt == NULL)
|
||||
return;
|
||||
|
||||
xmlHashFree(ctxt->nsHash, NULL);
|
||||
xmlHashFree(ctxt->nsHash, (xmlHashDeallocator)xmlFree);
|
||||
ctxt->nsHash = NULL;
|
||||
}
|
||||
|
||||
@ -10773,6 +10773,119 @@ xmlXPathEvalExpression(const xmlChar *str, xmlXPathContextPtr ctxt) {
|
||||
return(res);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* Extra functions not pertaining to the XPath spec *
|
||||
* *
|
||||
************************************************************************/
|
||||
/**
|
||||
* xmlXPathEscapeUriFunction:
|
||||
* @ctxt: the XPath Parser context
|
||||
* @nargs: the number of arguments
|
||||
*
|
||||
* Implement the escape-uri() XPath function
|
||||
* string escape-uri(string $str, bool $escape-reserved)
|
||||
*
|
||||
* This function applies the URI escaping rules defined in section 2 of [RFC
|
||||
* 2396] to the string supplied as $uri-part, which typically represents all
|
||||
* or part of a URI. The effect of the function is to replace any special
|
||||
* character in the string by an escape sequence of the form %xx%yy...,
|
||||
* where xxyy... is the hexadecimal representation of the octets used to
|
||||
* represent the character in UTF-8.
|
||||
*
|
||||
* The set of characters that are escaped depends on the setting of the
|
||||
* boolean argument $escape-reserved.
|
||||
*
|
||||
* If $escape-reserved is true, all characters are escaped other than lower
|
||||
* case letters a-z, upper case letters A-Z, digits 0-9, and the characters
|
||||
* referred to in [RFC 2396] as "marks": specifically, "-" | "_" | "." | "!"
|
||||
* | "~" | "*" | "'" | "(" | ")". The "%" character itself is escaped only
|
||||
* if it is not followed by two hexadecimal digits (that is, 0-9, a-f, and
|
||||
* A-F).
|
||||
*
|
||||
* If $escape-reserved is false, the behavior differs in that characters
|
||||
* referred to in [RFC 2396] as reserved characters are not escaped. These
|
||||
* characters are ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ",".
|
||||
*
|
||||
* [RFC 2396] does not define whether escaped URIs should use lower case or
|
||||
* upper case for hexadecimal digits. To ensure that escaped URIs can be
|
||||
* compared using string comparison functions, this function must always use
|
||||
* the upper-case letters A-F.
|
||||
*
|
||||
* Generally, $escape-reserved should be set to true when escaping a string
|
||||
* that is to form a single part of a URI, and to false when escaping an
|
||||
* entire URI or URI reference.
|
||||
*
|
||||
* In the case of non-ascii characters, the string is encoded according to
|
||||
* utf-8 and then converted according to RFC 2396.
|
||||
*
|
||||
* Examples
|
||||
* xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true())
|
||||
* returns "gopher%3A%2F%2Fspinaltap.micro.umn.edu%2F00%2FWeather%2FCalifornia%2FLos%20Angeles%23ocean"
|
||||
* xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), false())
|
||||
* returns "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles%23ocean"
|
||||
*
|
||||
*/
|
||||
void
|
||||
xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
|
||||
xmlXPathObjectPtr str;
|
||||
int escape_reserved;
|
||||
xmlBufferPtr target;
|
||||
xmlChar *cptr;
|
||||
xmlChar escape[4];
|
||||
|
||||
CHECK_ARITY(2);
|
||||
|
||||
escape_reserved = xmlXPathPopBoolean(ctxt);
|
||||
|
||||
CAST_TO_STRING;
|
||||
str = valuePop(ctxt);
|
||||
|
||||
target = xmlBufferCreate();
|
||||
|
||||
escape[0] = '%';
|
||||
escape[3] = 0;
|
||||
|
||||
if (target) {
|
||||
for (cptr = str->stringval; *cptr; cptr++) {
|
||||
if ((*cptr >= 'A' && *cptr <= 'Z') ||
|
||||
(*cptr >= 'a' && *cptr <= 'z') ||
|
||||
(*cptr >= '0' && *cptr <= '9') ||
|
||||
*cptr == '-' || *cptr == '_' || *cptr == '.' ||
|
||||
*cptr == '!' || *cptr == '~' || *cptr == '*' ||
|
||||
*cptr == '\''|| *cptr == '(' || *cptr == ')' ||
|
||||
(*cptr == '%' &&
|
||||
((cptr[1] >= 'A' && cptr[1] <= 'F') ||
|
||||
(cptr[1] >= 'a' && cptr[1] <= 'f') ||
|
||||
(cptr[1] >= '0' && cptr[1] <= '9')) &&
|
||||
((cptr[2] >= 'A' && cptr[2] <= 'F') ||
|
||||
(cptr[2] >= 'a' && cptr[2] <= 'f') ||
|
||||
(cptr[2] >= '0' && cptr[2] <= '9'))) ||
|
||||
(!escape_reserved &&
|
||||
(*cptr == ';' || *cptr == '/' || *cptr == '?' ||
|
||||
*cptr == ':' || *cptr == '@' || *cptr == '&' ||
|
||||
*cptr == '=' || *cptr == '+' || *cptr == '$' ||
|
||||
*cptr == ','))) {
|
||||
xmlBufferAdd(target, cptr, 1);
|
||||
} else {
|
||||
if ((*cptr >> 4) < 10)
|
||||
escape[1] = '0' + (*cptr >> 4);
|
||||
else
|
||||
escape[1] = 'A' - 10 + (*cptr >> 4);
|
||||
if ((*cptr & 0xF) < 10)
|
||||
escape[2] = '0' + (*cptr & 0xF);
|
||||
else
|
||||
escape[2] = 'A' - 10 + (*cptr & 0xF);
|
||||
|
||||
xmlBufferAdd(target, &escape[0], 3);
|
||||
}
|
||||
}
|
||||
}
|
||||
valuePush(ctxt, xmlXPathNewString(xmlBufferContent(target)));
|
||||
xmlBufferFree(target);
|
||||
xmlXPathFreeObject(str);
|
||||
}
|
||||
|
||||
/**
|
||||
* xmlXPathRegisterAllFunctions:
|
||||
* @ctxt: the XPath context
|
||||
@ -10836,6 +10949,10 @@ xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt)
|
||||
xmlXPathTrueFunction);
|
||||
xmlXPathRegisterFunc(ctxt, (const xmlChar *)"translate",
|
||||
xmlXPathTranslateFunction);
|
||||
|
||||
xmlXPathRegisterFuncNS(ctxt, (const xmlChar *)"escape-uri",
|
||||
(const xmlChar *)"http://www.w3.org/2002/08/xquery-functions",
|
||||
xmlXPathEscapeUriFunction);
|
||||
}
|
||||
|
||||
#endif /* LIBXML_XPATH_ENABLED */
|
||||
|
Loading…
Reference in New Issue
Block a user