applied patch from Graham Bennett adding 4 convenience functions to the

* include/libxml/xmlreader.h xmlreader.c: applied patch from
  Graham Bennett adding 4 convenience functions to the reader API.
Daniel
This commit is contained in:
Daniel Veillard 2004-10-19 09:04:23 +00:00
parent 9638d4c20f
commit e2811270e8
5 changed files with 213 additions and 274 deletions

View File

@ -1,3 +1,8 @@
Tue Oct 19 11:06:39 CEST 2004 Daniel Veillard <daniel@veillard.com>
* include/libxml/xmlreader.h xmlreader.c: applied patch from
Graham Bennett adding 4 convenience functions to the reader API.
Fri Oct 15 11:22:48 PDT 2004 William Brack <wbrack@mmm.com.hk>
* debugXML.c: excluded a few nodes (with no content) from the

View File

@ -217,7 +217,8 @@ pnode=pxmlDoc-&gt;children-&gt;children;</pre>
<p>Website: <a
href="http://pmade.org/pjones/software/xmlwrapp/">http://pmade.org/pjones/software/xmlwrapp/</a></p>
</li>
--></ul></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

View File

@ -12,8 +12,7 @@ H2 {font-family: Verdana,Arial,Helvetica}
H3 {font-family: Verdana,Arial,Helvetica}
A:link, A:visited, A:active { text-decoration: underline }
</style>
<title>The XML C parser and toolkit of Gnome
</title>
<title>The XML C parser and toolkit of Gnome</title>
</head>
<body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000">
<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center">
@ -46,10 +45,8 @@ A:link, A:visited, A:active { text-decoration: underline }
<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>libxml
</h2>
<h1>The XML C parser and toolkit of Gnome</h1>
<h2>libxml</h2>
</td>
</tr>
</table>
@ -72,8 +69,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<tr>
<td colspan="1" bgcolor="#eecfa1" align="center">
<center>
<b>Main Menu
</b>
<b>Main Menu</b>
</center>
</td>
</tr>
@ -85,80 +81,61 @@ A:link, A:visited, A:active { text-decoration: underline }
</form>
<ul>
<li>
<a href="index.html">Home
</a>
<a href="index.html">Home</a>
</li>
<li>
<a href="intro.html">Introduction
</a>
<a href="intro.html">Introduction</a>
</li>
<li>
<a href="FAQ.html">FAQ
</a>
<a href="FAQ.html">FAQ</a>
</li>
<li>
<a href="docs.html" style="font-weight:bold">Developer Menu
</a>
<a href="docs.html" style="font-weight:bold">Developer Menu</a>
</li>
<li>
<a href="bugs.html">Reporting bugs and getting help
</a>
<a href="bugs.html">Reporting bugs and getting help</a>
</li>
<li>
<a href="help.html">How to help
</a>
<a href="help.html">How to help</a>
</li>
<li>
<a href="downloads.html">Downloads
</a>
<a href="downloads.html">Downloads</a>
</li>
<li>
<a href="news.html">Releases
</a>
<a href="news.html">Releases</a>
</li>
<li>
<a href="XMLinfo.html">XML
</a>
<a href="XMLinfo.html">XML</a>
</li>
<li>
<a href="XSLT.html">XSLT
</a>
<a href="XSLT.html">XSLT</a>
</li>
<li>
<a href="xmldtd.html">Validation &amp; DTDs
</a>
<a href="xmldtd.html">Validation &amp; DTDs</a>
</li>
<li>
<a href="encoding.html">Encodings support
</a>
<a href="encoding.html">Encodings support</a>
</li>
<li>
<a href="catalog.html">Catalog support
</a>
<a href="catalog.html">Catalog support</a>
</li>
<li>
<a href="namespaces.html">Namespaces
</a>
<a href="namespaces.html">Namespaces</a>
</li>
<li>
<a href="contribs.html">Contributions
</a>
<a href="contribs.html">Contributions</a>
</li>
<li>
<a href="examples/index.html" style="font-weight:bold">Code Examples
</a>
<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>
<a href="html/index.html" style="font-weight:bold">API Menu</a>
</li>
<li>
<a href="guidelines.html">XML Guidelines
</a>
<a href="guidelines.html">XML Guidelines</a>
</li>
<li>
<a href="ChangeLog.html">Recent Changes
</a>
<a href="ChangeLog.html">Recent Changes</a>
</li>
</ul>
</td>
@ -168,8 +145,7 @@ A:link, A:visited, A:active { text-decoration: underline }
<tr>
<td colspan="1" bgcolor="#eecfa1" align="center">
<center>
<b>Related links
</b>
<b>Related links</b>
</center>
</td>
</tr>
@ -177,44 +153,34 @@ A:link, A:visited, A:active { text-decoration: underline }
<td bgcolor="#fffacd">
<ul>
<li>
<a href="http://mail.gnome.org/archives/xml/">Mail archive
</a>
<a href="http://mail.gnome.org/archives/xml/">Mail archive</a>
</li>
<li>
<a href="http://xmlsoft.org/XSLT/">XSLT libxslt
</a>
<a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a>
</li>
<li>
<a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2
</a>
<a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a>
</li>
<li>
<a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec
</a>
<a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a>
</li>
<li>
<a href="ftp://xmlsoft.org/">FTP
</a>
<a href="ftp://xmlsoft.org/">FTP</a>
</li>
<li>
<a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries
</a>
<a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a>
</li>
<li>
<a href="http://garypennington.net/libxml2/">Solaris binaries
</a>
<a href="http://garypennington.net/libxml2/">Solaris binaries</a>
</li>
<li>
<a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries
</a>
<a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a>
</li>
<li>
<a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings
</a>
<a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a>
</li>
<li>
<a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker
</a>
<a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a>
</li>
</ul>
</td>
@ -236,227 +202,77 @@ A:link, A:visited, A:active { text-decoration: underline }
<td bgcolor="#fffacd">
<p></p>
<p style="text-align: right; font-style: italic; font-size: 10pt">"Programming
with libxml2 is like the thrilling embrace of an exotic stranger."
<a href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark
Pilgrim
</a>
</p>
with libxml2 is like the thrilling embrace of an exotic stranger." <a href="http://diveintomark.org/archives/2004/02/18/libxml2">Mark
Pilgrim</a></p>
<p>Libxml2 is the XML C parser and toolkit developed for the Gnome project
(but usable outside of the Gnome platform), it is free software available
under the
<a href="http://www.opensource.org/licenses/mit-license.html">MIT
License
</a>
. XML itself is a metalanguage to design markup languages, i.e.
under the <a href="http://www.opensource.org/licenses/mit-license.html">MIT
License</a>. XML itself is a metalanguage to design markup languages, i.e.
text language where semantic and structure are added to the content using
extra "markup" information enclosed between angle brackets. HTML is the most
well-known markup language. Though the library is written in C
<a href="python.html">a variety of language bindings
</a>
make it available in
other environments.
</p>
well-known markup language. Though the library is written in C <a href="python.html">a variety of language bindings</a> make it available in
other environments.</p>
<p>Libxml2 is known to be very portable, the library should build and work
without serious troubles on a variety of systems (Linux, Unix, Windows,
CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, ...)
</p>
CygWin, MacOS, MacOS X, RISC Os, OS/2, VMS, QNX, MVS, ...)</p>
<p>Libxml2 implements a number of existing standards related to markup
languages:
</p>
<ul> <li>the XML standard:
<a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml
</a>
</li>
<li>Namespaces in XML:
<a href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/
</a>
</li>
<li>XML Base:
<a href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/
</a>
</li>
<li> <a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396
</a>
:
Uniform Resource Identifiers
<a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt
</a>
</li>
<li>XML Path Language (XPath) 1.0:
<a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath
</a>
</li>
<li>HTML4 parser:
<a href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/
</a>
</li>
<li>XML Pointer Language (XPointer) Version 1.0:
<a href="http://www.w3.org/TR/xptr">http://www.w3.org/TR/xptr
</a>
</li>
<li>XML Inclusions (XInclude) Version 1.0:
<a href="http://www.w3.org/TR/xinclude/">http://www.w3.org/TR/xinclude/
</a>
</li>
<li>ISO-8859-x encodings, as well as
<a href="http://www.cis.ohio-state.edu/rfc/rfc2044.txt">rfc2044
</a>
[UTF-8]
and
<a href="http://www.cis.ohio-state.edu/rfc/rfc2781.txt">rfc2781
</a>
[UTF-16] Unicode encodings, and more if using iconv support
</li>
<li>part of SGML Open Technical Resolution TR9401:1997
</li>
<li>XML Catalogs Working Draft 06 August 2001:
<a href="http://www.oasis-open.org/committees/entity/spec-2001-08-06.html">http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
</a>
</li>
<li>Canonical XML Version 1.0:
<a href="http://www.w3.org/TR/xml-c14n">http://www.w3.org/TR/xml-c14n
</a>
and the Exclusive XML Canonicalization CR draft
<a href="http://www.w3.org/TR/xml-exc-c14n">http://www.w3.org/TR/xml-exc-c14n
</a>
</li>
<li>Relax NG, ISO/IEC 19757-2:2003,
<a href="http://www.oasis-open.org/committees/relax-ng/spec-20011203.html">http://www.oasis-open.org/committees/relax-ng/spec-20011203.html
</a>
</li>
<li>W3C XML Schemas Part 2: Datatypes
<a href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">REC 02 May
2001
</a>
</li>
<li>W3C
<a href="http://www.w3.org/TR/xml-id/">xml:id
</a>
Working Draft 7
April 2004
</li>
languages:</p>
<ul><li>the XML standard: <a href="http://www.w3.org/TR/REC-xml">http://www.w3.org/TR/REC-xml</a></li>
<li>Namespaces in XML: <a href="http://www.w3.org/TR/REC-xml-names/">http://www.w3.org/TR/REC-xml-names/</a></li>
<li>XML Base: <a href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a></li>
<li><a href="http://www.cis.ohio-state.edu/rfc/rfc2396.txt">RFC 2396</a> :
Uniform Resource Identifiers <a href="http://www.ietf.org/rfc/rfc2396.txt">http://www.ietf.org/rfc/rfc2396.txt</a></li>
<li>XML Path Language (XPath) 1.0: <a href="http://www.w3.org/TR/xpath">http://www.w3.org/TR/xpath</a></li>
<li>HTML4 parser: <a href="http://www.w3.org/TR/html401/">http://www.w3.org/TR/html401/</a></li>
<li>XML Pointer Language (XPointer) Version 1.0: <a href="http://www.w3.org/TR/xptr">http://www.w3.org/TR/xptr</a></li>
<li>XML Inclusions (XInclude) Version 1.0: <a href="http://www.w3.org/TR/xinclude/">http://www.w3.org/TR/xinclude/</a></li>
<li>ISO-8859-x encodings, as well as <a href="http://www.cis.ohio-state.edu/rfc/rfc2044.txt">rfc2044</a> [UTF-8]
and <a href="http://www.cis.ohio-state.edu/rfc/rfc2781.txt">rfc2781</a>
[UTF-16] Unicode encodings, and more if using iconv support</li>
<li>part of SGML Open Technical Resolution TR9401:1997</li>
<li>XML Catalogs Working Draft 06 August 2001: <a href="http://www.oasis-open.org/committees/entity/spec-2001-08-06.html">http://www.oasis-open.org/committees/entity/spec-2001-08-06.html</a></li>
<li>Canonical XML Version 1.0: <a href="http://www.w3.org/TR/xml-c14n">http://www.w3.org/TR/xml-c14n</a>
and the Exclusive XML Canonicalization CR draft <a href="http://www.w3.org/TR/xml-exc-c14n">http://www.w3.org/TR/xml-exc-c14n</a></li>
<li>Relax NG, ISO/IEC 19757-2:2003, <a href="http://www.oasis-open.org/committees/relax-ng/spec-20011203.html">http://www.oasis-open.org/committees/relax-ng/spec-20011203.html</a></li>
<li>W3C XML Schemas Part 2: Datatypes <a href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">REC 02 May
2001</a></li>
<li>W3C <a href="http://www.w3.org/TR/xml-id/">xml:id</a> Working Draft 7
April 2004</li>
</ul>
<p>In most cases libxml2 tries to implement the specifications in a
relatively strictly compliant way. As of release 2.4.16, libxml2 passed all
1800+ tests from the
<a href="http://www.oasis-open.org/committees/xml-conformance/">OASIS XML Tests
Suite
</a>
.
</p>
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>
<ul> <li>Document Object Model (DOM)
<a href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/
</a>
specifications but doesn't claim to implement them completely:</p>
<ul><li>Document Object Model (DOM) <a href="http://www.w3.org/TR/DOM-Level-2-Core/">http://www.w3.org/TR/DOM-Level-2-Core/</a>
the document model, but it doesn't implement the API itself, gdome2 does
this on top of libxml2
</li>
<li> <a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959
</a>
:
libxml2 implements a basic FTP client code
</li>
<li> <a href="http://www.cis.ohio-state.edu/rfc/rfc1945.txt">RFC 1945
</a>
:
HTTP/1.0, again a basic HTTP client code
</li>
<li>SAX: a SAX2 like interface and a minimal SAX1 implementation compatible
with early expat versions
</li>
this on top of libxml2</li>
<li><a href="http://www.cis.ohio-state.edu/rfc/rfc959.txt">RFC 959</a> :
libxml2 implements a basic FTP client code</li>
<li><a href="http://www.cis.ohio-state.edu/rfc/rfc1945.txt">RFC 1945</a> :
HTTP/1.0, again a basic HTTP client code</li>
<li>SAX: a SAX2 like interface and a minimal SAX1 implementation compatible
with early expat versions</li>
</ul>
<p>A partial implementation of
<a href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
1: Structure
</a>
is being worked on but it would be far too early to make any
conformance statement about it at the moment.
</p>
<p>Separate documents:
</p>
<ul> <li> <a href="http://xmlsoft.org/XSLT/">the libxslt page
</a>
providing an
<p>A partial implementation of <a href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">XML Schemas Part
1: Structure</a> is being worked on but it would be far too early to make any
conformance statement about it at the moment.</p>
<p>Separate documents:</p>
<ul><li><a href="http://xmlsoft.org/XSLT/">the libxslt page</a> providing an
implementation of XSLT 1.0 and common extensions like EXSLT for
libxml2
</li>
<li> <a href="http://www.cs.unibo.it/~casarini/gdome2/">the gdome2 page
</a>
: a standard DOM2 implementation for libxml2
</li>
<li> <a href="http://www.aleksey.com/xmlsec/">the XMLSec page
</a>
: an
implementation of
<a href="http://www.w3.org/TR/xmldsig-core/">W3C XML
Digital Signature
</a>
for libxml2
</li>
<li>also check the related links section below for more related and active
projects.
</li>
libxml2</li>
<li><a href="http://www.cs.unibo.it/~casarini/gdome2/">the gdome2 page</a>
: a standard DOM2 implementation for libxml2</li>
<li><a href="http://www.aleksey.com/xmlsec/">the XMLSec page</a>: an
implementation of <a href="http://www.w3.org/TR/xmldsig-core/">W3C XML
Digital Signature</a> for libxml2</li>
<li>also check the related links section below for more related and active
projects.</li>
</ul>
<p>Logo designed by
<a href="mailto:liyanage@access.ch">Marc Liyanage
</a>
.
</p>
<p>Logo designed by <a href="mailto:liyanage@access.ch">Marc Liyanage</a>.</p>
<p>
<a href="bugs.html">Daniel Veillard
</a>
<a href="bugs.html">Daniel Veillard</a>
</p>
</td>
</tr>

View File

@ -150,6 +150,8 @@ XMLPUBFUN int XMLCALL
xmlTextReaderQuoteChar (xmlTextReaderPtr reader);
XMLPUBFUN int XMLCALL
xmlTextReaderReadState (xmlTextReaderPtr reader);
XMLPUBFUN int XMLCALL
xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
XMLPUBFUN const xmlChar * XMLCALL
xmlTextReaderConstBaseUri (xmlTextReaderPtr reader);
@ -226,6 +228,8 @@ XMLPUBFUN int XMLCALL
xmlTextReaderMoveToElement (xmlTextReaderPtr reader);
XMLPUBFUN int XMLCALL
xmlTextReaderNormalization (xmlTextReaderPtr reader);
XMLPUBFUN const xmlChar * XMLCALL
xmlTextReaderConstEncoding (xmlTextReaderPtr reader);
/*
* Extensions
@ -263,6 +267,10 @@ XMLPUBFUN int XMLCALL
xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
xmlRelaxNGPtr schema);
#endif
XMLPUBFUN const xmlChar * XMLCALL
xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
XMLPUBFUN int XMLCALL
xmlTextReaderStandalone (xmlTextReaderPtr reader);
/*
* New more complete APIs for simpler creation and reuse of readers

View File

@ -2629,6 +2629,34 @@ xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader) {
return(1);
}
/**
* xmlTextReaderConstEncoding:
* @reader: the xmlTextReaderPtr used
*
* Determine the encoding of the document being read.
*
* Returns a string containing the encoding of the document or NULL in
* case of error. The string is deallocated with the reader.
*/
const xmlChar *
xmlTextReaderConstEncoding(xmlTextReaderPtr reader) {
xmlDocPtr doc = NULL;
if (reader == NULL)
return(NULL);
if (reader->doc != NULL)
doc = reader->doc;
else if (reader->ctxt != NULL)
doc = reader->ctxt->myDoc;
if (doc == NULL)
return(NULL);
if (doc->encoding == NULL)
return(NULL);
else
return(CONSTSTR(doc->encoding));
}
/************************************************************************
* *
* Acces API to the current node *
@ -3799,6 +3827,87 @@ xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng) {
}
#endif
/**
* xmlTextReaderIsNamespaceDecl:
* @reader: the xmlTextReaderPtr used
*
* Determine whether the current node is a namespace declaration
* rather than a regular attribute.
*
* Returns 1 if the current node is a namespace declaration, 0 if it
* is a regular attribute or other type of node, or -1 in case of
* error.
*/
int
xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader) {
xmlNodePtr node;
if (reader == NULL)
return(-1);
if (reader->node == NULL)
return(-1);
if (reader->curnode != NULL)
node = reader->curnode;
else
node = reader->node;
if (XML_NAMESPACE_DECL == node->type)
return(1);
else
return(0);
}
/**
* xmlTextReaderConstXmlVersion:
* @reader: the xmlTextReaderPtr used
*
* Determine the XML version of the document being read.
*
* Returns a string containing the XML version of the document or NULL
* in case of error. The string is deallocated with the reader.
*/
const xmlChar *
xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader) {
xmlDocPtr doc = NULL;
if (reader == NULL)
return(NULL);
if (reader->doc != NULL)
doc = reader->doc;
else if (reader->ctxt != NULL)
doc = reader->ctxt->myDoc;
if (doc == NULL)
return(NULL);
if (doc->version == NULL)
return(NULL);
else
return(CONSTSTR(doc->version));
}
/**
* xmlTextReaderStandalone:
* @reader: the xmlTextReaderPtr used
*
* Determine the standalone status of the document being read.
*
* Returns 1 if the document was declared to be standalone, 0 if it
* was declared to be not standalone, or -1 if the document did not
* specify its standalone status or in case of error.
*/
int
xmlTextReaderStandalone(xmlTextReaderPtr reader) {
xmlDocPtr doc = NULL;
if (reader == NULL)
return(-1);
if (reader->doc != NULL)
doc = reader->doc;
else if (reader->ctxt != NULL)
doc = reader->ctxt->myDoc;
if (doc == NULL)
return(-1);
return(doc->standalone);
}
/************************************************************************
* *
* Error Handling Extensions *