blob: eba19cbc54f82df66eb0ffb02254c5886c3c80a5 [file] [log] [blame]
Daniel Veillardc9484202001-10-24 12:35:52 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
2<html>
3<head>
4<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
5<style type="text/css"><!--
6TD {font-size: 10pt; font-family: Verdana,Arial,Helvetica}
7BODY {font-size: 10pt; font-family: Verdana,Arial,Helvetica; margin-top: 5pt; margin-left: 0pt; margin-right: 0pt}
8H1 {font-size: 16pt; font-family: Verdana,Arial,Helvetica}
9H2 {font-size: 14pt; font-family: Verdana,Arial,Helvetica}
10H3 {font-size: 12pt; font-family: Verdana,Arial,Helvetica}
11--></style>
12<title>The SAX interface</title>
13</head>
14<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
15<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
16<td width="180">
17<a href="http://www.gnome.org/"><img src="smallfootonly.gif" alt="Gnome 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>
18</td>
19<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">
20<h1>The XML C library for Gnome</h1>
21<h2>The SAX interface</h2>
22</td></tr></table></td></tr></table></td>
23</tr></table>
24<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>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000025<td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td>
26<table width="100%" border="0" cellspacing="1" cellpadding="3">
Daniel Veillardc9484202001-10-24 12:35:52 +000027<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr>
28<tr><td bgcolor="#fffacd"><ul style="margin-left: -2pt">
29<li><a href="index.html">Home</a></li>
30<li><a href="FAQ.html">FAQ</a></li>
31<li><a href="intro.html">Introduction</a></li>
32<li><a href="docs.html">Documentation</a></li>
33<li><a href="bugs.html">Reporting bugs and getting help</a></li>
34<li><a href="help.html">How to help</a></li>
35<li><a href="downloads.html">Downloads</a></li>
36<li><a href="news.html">News</a></li>
37<li><a href="XML.html">XML</a></li>
38<li><a href="XSLT.html">XSLT</a></li>
39<li><a href="architecture.html">An overview of libxml architecture</a></li>
40<li><a href="tree.html">The tree output</a></li>
41<li><a href="interface.html">The SAX interface</a></li>
42<li><a href="library.html">The XML library interfaces</a></li>
43<li><a href="entities.html">Entities or no entities</a></li>
44<li><a href="namespaces.html">Namespaces</a></li>
45<li><a href="valid.html">Validation, or are you afraid of DTDs ?</a></li>
46<li><a href="DOM.html">DOM Principles</a></li>
47<li><a href="example.html">A real example</a></li>
48<li><a href="contribs.html">Contributions</a></li>
49<li><a href="encoding.html">Encodings support</a></li>
50<li><a href="catalog.html">Catalogs support</a></li>
51<li><a href="xmlio.html">I/O interfaces</a></li>
52<li><a href="xmlmem.html">Memory interfaces</a></li>
53<li><a href="xmldtd.html">DTD support</a></li>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000054<li>
55<a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a>
56</li>
Daniel Veillardc9484202001-10-24 12:35:52 +000057</ul></td></tr>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000058</table>
59<table width="100%" border="0" cellspacing="1" cellpadding="3">
60<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr>
61<tr><td bgcolor="#fffacd"><ul style="margin-left: -2pt">
62<li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li>
63<li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li>
64<li><a href="http://www.cs.unibo.it/~casarini/gdome2/">DOM gdome2</a></li>
65<li><a href="ftp://xmlsoft.org/">FTP</a></li>
66<li><a href="http://www.fh-frankfurt.de/~igor/projects/libxml/">Windows binaries</a></li>
67<li><a href="http://pages.eidosnet.co.uk/~garypen/libxml/">Solaris binaries</a></li>
68</ul></td></tr>
69</table>
70</td></tr></table></td>
Daniel Veillardc9484202001-10-24 12:35:52 +000071<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">
72<p>Sometimes the DOM tree output is just too large to fit reasonably into
73memory. In that case (and if you don't expect to save back the XML document
74loaded using libxml), it's better to use the SAX interface of libxml. SAX is
75a <strong>callback-based interface</strong> to the parser. Before parsing,
76the application layer registers a customized set of callbacks which are
77called by the library as it progresses through the XML input.</p>
78<p>To get more detailed step-by-step guidance on using the SAX interface of
79libxml, see the <a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">nice
80documentation</a>.written by <a href="mailto:james@daa.com.au">James
81Henstridge</a>.</p>
82<p>You can debug the SAX behaviour by using the <strong>testSAX</strong>
83program located in the gnome-xml module (it's usually not shipped in the
84binary packages of libxml, but you can find it in the tar source
85distribution). Here is the sequence of callbacks that would be reported by
86testSAX when parsing the example XML document shown earlier:</p>
87<pre>SAX.setDocumentLocator()
88SAX.startDocument()
89SAX.getEntity(amp)
90SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&amp;amp; linux too')
91SAX.characters( , 3)
92SAX.startElement(head)
93SAX.characters( , 4)
94SAX.startElement(title)
95SAX.characters(Welcome to Gnome, 16)
96SAX.endElement(title)
97SAX.characters( , 3)
98SAX.endElement(head)
99SAX.characters( , 3)
100SAX.startElement(chapter)
101SAX.characters( , 4)
102SAX.startElement(title)
103SAX.characters(The Linux adventure, 19)
104SAX.endElement(title)
105SAX.characters( , 4)
106SAX.startElement(p)
107SAX.characters(bla bla bla ..., 15)
108SAX.endElement(p)
109SAX.characters( , 4)
110SAX.startElement(image, href='linus.gif')
111SAX.endElement(image)
112SAX.characters( , 4)
113SAX.startElement(p)
114SAX.characters(..., 3)
115SAX.endElement(p)
116SAX.characters( , 3)
117SAX.endElement(chapter)
118SAX.characters( , 1)
119SAX.endElement(EXAMPLE)
120SAX.endDocument()</pre>
121<p>Most of the other interfaces of libxml are based on the DOM tree-building
122facility, so nearly everything up to the end of this document presupposes the
123use of the standard DOM tree build. Note that the DOM tree itself is built by
124a set of registered default callbacks, without internal specific
125interface.</p>
126<p><a href="mailto:daniel@veillard.com">Daniel Veillard</a></p>
127</td></tr></table></td></tr></table></td></tr></table></td>
128</tr></table></td></tr></table>
129</body>
130</html>