blob: 9038022b08aa10d0e97d044e63920c9f3f741221 [file] [log] [blame]
Daniel Veillard43d3f612001-11-10 11:57:23 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
Daniel Veillardc9484202001-10-24 12:35:52 +00002<html>
3<head>
4<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
5<style type="text/css"><!--
Daniel Veillard373a4752002-02-21 14:46:29 +00006TD {font-family: Verdana,Arial,Helvetica}
7BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
8H1 {font-family: Verdana,Arial,Helvetica}
9H2 {font-family: Verdana,Arial,Helvetica}
10H3 {font-family: Verdana,Arial,Helvetica}
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000011A:link, A:visited, A:active { text-decoration: underline }
Daniel Veillardc9484202001-10-24 12:35:52 +000012--></style>
13<title>The SAX interface</title>
14</head>
15<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
16<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
17<td width="180">
18<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>
19</td>
20<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">
21<h1>The XML C library for Gnome</h1>
22<h2>The SAX interface</h2>
23</td></tr></table></td></tr></table></td>
24</tr></table>
25<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 +000026<td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td>
27<table width="100%" border="0" cellspacing="1" cellpadding="3">
Daniel Veillardc9484202001-10-24 12:35:52 +000028<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr>
Daniel Veillard8acca112002-01-21 09:52:27 +000029<tr><td bgcolor="#fffacd"><ul>
Daniel Veillardc9484202001-10-24 12:35:52 +000030<li><a href="index.html">Home</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000031<li><a href="intro.html">Introduction</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000032<li><a href="FAQ.html">FAQ</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000033<li><a href="docs.html">Documentation</a></li>
34<li><a href="bugs.html">Reporting bugs and getting help</a></li>
35<li><a href="help.html">How to help</a></li>
36<li><a href="downloads.html">Downloads</a></li>
37<li><a href="news.html">News</a></li>
Daniel Veillard7b602b42002-01-08 13:26:00 +000038<li><a href="XMLinfo.html">XML</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000039<li><a href="XSLT.html">XSLT</a></li>
Daniel Veillard6dbcaf82002-02-20 14:37:47 +000040<li><a href="python.html">Python and bindings</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000041<li><a href="architecture.html">libxml architecture</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000042<li><a href="tree.html">The tree output</a></li>
43<li><a href="interface.html">The SAX interface</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000044<li><a href="xmldtd.html">Validation &amp; DTDs</a></li>
45<li><a href="xmlmem.html">Memory Management</a></li>
46<li><a href="encoding.html">Encodings support</a></li>
47<li><a href="xmlio.html">I/O Interfaces</a></li>
48<li><a href="catalog.html">Catalog support</a></li>
49<li><a href="library.html">The parser interfaces</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000050<li><a href="entities.html">Entities or no entities</a></li>
51<li><a href="namespaces.html">Namespaces</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000052<li><a href="upgrade.html">Upgrading 1.x code</a></li>
Daniel Veillard52dcab32001-10-30 12:51:17 +000053<li><a href="threads.html">Thread safety</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000054<li><a href="DOM.html">DOM Principles</a></li>
55<li><a href="example.html">A real example</a></li>
56<li><a href="contribs.html">Contributions</a></li>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000057<li>
58<a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a>
59</li>
Daniel Veillardc9484202001-10-24 12:35:52 +000060</ul></td></tr>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000061</table>
62<table width="100%" border="0" cellspacing="1" cellpadding="3">
Daniel Veillard3bf65be2002-01-23 12:36:34 +000063<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>API Indexes</b></center></td></tr>
64<tr><td bgcolor="#fffacd"><ul>
Daniel Veillardf8592562002-01-23 17:58:17 +000065<li><a href="APIchunk0.html">Alphabetic</a></li>
Daniel Veillard3bf65be2002-01-23 12:36:34 +000066<li><a href="APIconstructors.html">Constructors</a></li>
67<li><a href="APIfunctions.html">Functions/Types</a></li>
68<li><a href="APIfiles.html">Modules</a></li>
69<li><a href="APIsymbols.html">Symbols</a></li>
70</ul></td></tr>
71</table>
72<table width="100%" border="0" cellspacing="1" cellpadding="3">
Daniel Veillard594cf0b2001-10-25 08:09:12 +000073<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr>
Daniel Veillard8acca112002-01-21 09:52:27 +000074<tr><td bgcolor="#fffacd"><ul>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000075<li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li>
76<li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li>
Daniel Veillard4a859202002-01-08 11:49:22 +000077<li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000078<li><a href="ftp://xmlsoft.org/">FTP</a></li>
79<li><a href="http://www.fh-frankfurt.de/~igor/projects/libxml/">Windows binaries</a></li>
Daniel Veillarddb9dfd92001-11-26 17:25:02 +000080<li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li>
Daniel Veillardc6271d22001-10-27 07:50:58 +000081<li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml">Bug Tracker</a></li>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000082</ul></td></tr>
83</table>
84</td></tr></table></td>
Daniel Veillardc9484202001-10-24 12:35:52 +000085<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">
86<p>Sometimes the DOM tree output is just too large to fit reasonably into
87memory. In that case (and if you don't expect to save back the XML document
88loaded using libxml), it's better to use the SAX interface of libxml. SAX is
89a <strong>callback-based interface</strong> to the parser. Before parsing,
90the application layer registers a customized set of callbacks which are
91called by the library as it progresses through the XML input.</p>
92<p>To get more detailed step-by-step guidance on using the SAX interface of
93libxml, see the <a href="http://www.daa.com.au/~james/gnome/xml-sax/xml-sax.html">nice
94documentation</a>.written by <a href="mailto:james@daa.com.au">James
95Henstridge</a>.</p>
96<p>You can debug the SAX behaviour by using the <strong>testSAX</strong>
97program located in the gnome-xml module (it's usually not shipped in the
98binary packages of libxml, but you can find it in the tar source
99distribution). Here is the sequence of callbacks that would be reported by
100testSAX when parsing the example XML document shown earlier:</p>
101<pre>SAX.setDocumentLocator()
102SAX.startDocument()
103SAX.getEntity(amp)
104SAX.startElement(EXAMPLE, prop1='gnome is great', prop2='&amp;amp; linux too')
105SAX.characters( , 3)
106SAX.startElement(head)
107SAX.characters( , 4)
108SAX.startElement(title)
109SAX.characters(Welcome to Gnome, 16)
110SAX.endElement(title)
111SAX.characters( , 3)
112SAX.endElement(head)
113SAX.characters( , 3)
114SAX.startElement(chapter)
115SAX.characters( , 4)
116SAX.startElement(title)
117SAX.characters(The Linux adventure, 19)
118SAX.endElement(title)
119SAX.characters( , 4)
120SAX.startElement(p)
121SAX.characters(bla bla bla ..., 15)
122SAX.endElement(p)
123SAX.characters( , 4)
124SAX.startElement(image, href='linus.gif')
125SAX.endElement(image)
126SAX.characters( , 4)
127SAX.startElement(p)
128SAX.characters(..., 3)
129SAX.endElement(p)
130SAX.characters( , 3)
131SAX.endElement(chapter)
132SAX.characters( , 1)
133SAX.endElement(EXAMPLE)
134SAX.endDocument()</pre>
135<p>Most of the other interfaces of libxml are based on the DOM tree-building
136facility, so nearly everything up to the end of this document presupposes the
137use of the standard DOM tree build. Note that the DOM tree itself is built by
138a set of registered default callbacks, without internal specific
139interface.</p>
Daniel Veillard3f4c40f2002-02-13 09:19:28 +0000140<p><a href="bugs.html">Daniel Veillard</a></p>
Daniel Veillardc9484202001-10-24 12:35:52 +0000141</td></tr></table></td></tr></table></td></tr></table></td>
142</tr></table></td></tr></table>
143</body>
144</html>