blob: f4add5622569bba03f1fc9bfcb10eb353273aca6 [file] [log] [blame]
Daniel Veillarde1ca5032002-12-09 14:13:43 +00001/*
Daniel Veillardbe586972003-11-18 20:56:51 +00002 * Summary: the XMLReader implementation
3 * Description: API of the XML streaming API based on C# interfaces.
Daniel Veillarde1ca5032002-12-09 14:13:43 +00004 *
Daniel Veillardbe586972003-11-18 20:56:51 +00005 * Copy: See Copyright for the status of this software.
Daniel Veillarde1ca5032002-12-09 14:13:43 +00006 *
Daniel Veillardbe586972003-11-18 20:56:51 +00007 * Author: Daniel Veillard
Daniel Veillarde1ca5032002-12-09 14:13:43 +00008 */
9
10#ifndef __XML_XMLREADER_H__
11#define __XML_XMLREADER_H__
12
Igor Zlatkovic76874e42003-08-25 09:05:12 +000013#include <libxml/xmlversion.h>
Daniel Veillarde1ca5032002-12-09 14:13:43 +000014#include <libxml/tree.h>
15#include <libxml/xmlIO.h>
Daniel Veillard33300b42003-04-17 09:09:19 +000016#ifdef LIBXML_SCHEMAS_ENABLED
17#include <libxml/relaxng.h>
18#endif
Daniel Veillarde1ca5032002-12-09 14:13:43 +000019
20#ifdef __cplusplus
21extern "C" {
22#endif
23
Daniel Veillardbeb70bd2002-12-18 14:53:54 +000024typedef enum {
25 XML_PARSER_LOADDTD = 1,
Daniel Veillarde18fc182002-12-28 22:56:33 +000026 XML_PARSER_DEFAULTATTRS = 2,
27 XML_PARSER_VALIDATE = 3,
28 XML_PARSER_SUBST_ENTITIES = 4
Daniel Veillardbeb70bd2002-12-18 14:53:54 +000029} xmlParserProperties;
30
Daniel Veillard26f70262003-01-16 22:45:08 +000031typedef enum {
Daniel Veillard417be3a2003-01-20 21:26:34 +000032 XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
33 XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
34 XML_PARSER_SEVERITY_WARNING = 3,
35 XML_PARSER_SEVERITY_ERROR = 4
36} xmlParserSeverities;
Daniel Veillard26f70262003-01-16 22:45:08 +000037
Daniel Veillard0ab6fa02003-08-09 18:01:53 +000038typedef enum {
Daniel Veillardd6038e02003-07-30 16:37:18 +000039 XML_READER_TYPE_NONE = 0,
40 XML_READER_TYPE_ELEMENT = 1,
41 XML_READER_TYPE_ATTRIBUTE = 2,
42 XML_READER_TYPE_TEXT = 3,
43 XML_READER_TYPE_CDATA = 4,
44 XML_READER_TYPE_ENTITY_REFERENCE = 5,
45 XML_READER_TYPE_ENTITY = 6,
46 XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
47 XML_READER_TYPE_COMMENT = 8,
48 XML_READER_TYPE_DOCUMENT = 9,
49 XML_READER_TYPE_DOCUMENT_TYPE = 10,
50 XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
51 XML_READER_TYPE_NOTATION = 12,
52 XML_READER_TYPE_WHITESPACE = 13,
53 XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
54 XML_READER_TYPE_END_ELEMENT = 15,
55 XML_READER_TYPE_END_ENTITY = 16,
56 XML_READER_TYPE_XML_DECLARATION = 17
Daniel Veillard0ab6fa02003-08-09 18:01:53 +000057} xmlReaderTypes;
Daniel Veillardd6038e02003-07-30 16:37:18 +000058
Daniel Veillarde1ca5032002-12-09 14:13:43 +000059typedef struct _xmlTextReader xmlTextReader;
60typedef xmlTextReader *xmlTextReaderPtr;
61
62/*
63 * Constructors & Destructor
64 */
Igor Zlatkovic76874e42003-08-25 09:05:12 +000065XMLPUBFUN xmlTextReaderPtr XMLCALL
66 xmlNewTextReader (xmlParserInputBufferPtr input,
Daniel Veillardea7751d2002-12-20 00:16:24 +000067 const char *URI);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +000068XMLPUBFUN xmlTextReaderPtr XMLCALL
69 xmlNewTextReaderFilename(const char *URI);
70XMLPUBFUN void XMLCALL
71 xmlFreeTextReader (xmlTextReaderPtr reader);
Daniel Veillarde1ca5032002-12-09 14:13:43 +000072
73/*
74 * Iterators
75 */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +000076XMLPUBFUN int XMLCALL
77 xmlTextReaderRead (xmlTextReaderPtr reader);
78XMLPUBFUN xmlChar * XMLCALL
79 xmlTextReaderReadInnerXml (xmlTextReaderPtr reader);
80XMLPUBFUN xmlChar * XMLCALL
81 xmlTextReaderReadOuterXml (xmlTextReaderPtr reader);
82XMLPUBFUN xmlChar * XMLCALL
83 xmlTextReaderReadString (xmlTextReaderPtr reader);
84XMLPUBFUN int XMLCALL
85 xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader);
Daniel Veillarde1ca5032002-12-09 14:13:43 +000086
87/*
88 * Attributes of the node
89 */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +000090XMLPUBFUN int XMLCALL
91 xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +000092XMLPUBFUN int XMLCALL
93 xmlTextReaderDepth (xmlTextReaderPtr reader);
94XMLPUBFUN int XMLCALL
95 xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
96XMLPUBFUN int XMLCALL
97 xmlTextReaderHasValue(xmlTextReaderPtr reader);
98XMLPUBFUN int XMLCALL
99 xmlTextReaderIsDefault (xmlTextReaderPtr reader);
100XMLPUBFUN int XMLCALL
101 xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
Daniel Veillarde72c5082003-09-19 12:44:05 +0000102XMLPUBFUN int XMLCALL
103 xmlTextReaderNodeType (xmlTextReaderPtr reader);
104XMLPUBFUN int XMLCALL
105 xmlTextReaderQuoteChar (xmlTextReaderPtr reader);
106XMLPUBFUN int XMLCALL
107 xmlTextReaderReadState (xmlTextReaderPtr reader);
Daniel Veillard0eb38c72002-12-14 23:00:35 +0000108
Daniel Veillarde72c5082003-09-19 12:44:05 +0000109XMLPUBFUN const xmlChar * XMLCALL
110 xmlTextReaderConstBaseUri (xmlTextReaderPtr reader);
111XMLPUBFUN const xmlChar * XMLCALL
112 xmlTextReaderConstLocalName (xmlTextReaderPtr reader);
113XMLPUBFUN const xmlChar * XMLCALL
114 xmlTextReaderConstName (xmlTextReaderPtr reader);
115XMLPUBFUN const xmlChar * XMLCALL
116 xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
117XMLPUBFUN const xmlChar * XMLCALL
118 xmlTextReaderConstPrefix (xmlTextReaderPtr reader);
119XMLPUBFUN const xmlChar * XMLCALL
120 xmlTextReaderConstXmlLang (xmlTextReaderPtr reader);
Daniel Veillardf85ce8e2003-09-22 10:24:45 +0000121XMLPUBFUN const xmlChar * XMLCALL
122 xmlTextReaderConstString (xmlTextReaderPtr reader,
123 const xmlChar *str);
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000124XMLPUBFUN const xmlChar * XMLCALL
125 xmlTextReaderConstValue (xmlTextReaderPtr reader);
126
127/*
128 * use the Const version of the routine for
129 * better performance and simpler code
130 */
131XMLPUBFUN xmlChar * XMLCALL
132 xmlTextReaderBaseUri (xmlTextReaderPtr reader);
133XMLPUBFUN xmlChar * XMLCALL
134 xmlTextReaderLocalName (xmlTextReaderPtr reader);
135XMLPUBFUN xmlChar * XMLCALL
136 xmlTextReaderName (xmlTextReaderPtr reader);
137XMLPUBFUN xmlChar * XMLCALL
138 xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
139XMLPUBFUN xmlChar * XMLCALL
140 xmlTextReaderPrefix (xmlTextReaderPtr reader);
141XMLPUBFUN xmlChar * XMLCALL
142 xmlTextReaderXmlLang (xmlTextReaderPtr reader);
143XMLPUBFUN xmlChar * XMLCALL
144 xmlTextReaderValue (xmlTextReaderPtr reader);
Daniel Veillardf85ce8e2003-09-22 10:24:45 +0000145
Daniel Veillard0eb38c72002-12-14 23:00:35 +0000146/*
147 * Methods of the XmlTextReader
148 */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000149XMLPUBFUN int XMLCALL
150 xmlTextReaderClose (xmlTextReaderPtr reader);
151XMLPUBFUN xmlChar * XMLCALL
152 xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader,
Daniel Veillard0eb38c72002-12-14 23:00:35 +0000153 int no);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000154XMLPUBFUN xmlChar * XMLCALL
155 xmlTextReaderGetAttribute (xmlTextReaderPtr reader,
Daniel Veillard0eb38c72002-12-14 23:00:35 +0000156 const xmlChar *name);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000157XMLPUBFUN xmlChar * XMLCALL
158 xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader,
Daniel Veillard0eb38c72002-12-14 23:00:35 +0000159 const xmlChar *localName,
160 const xmlChar *namespaceURI);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000161XMLPUBFUN xmlParserInputBufferPtr XMLCALL
162 xmlTextReaderGetRemainder (xmlTextReaderPtr reader);
163XMLPUBFUN xmlChar * XMLCALL
164 xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000165 const xmlChar *prefix);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000166XMLPUBFUN int XMLCALL
167 xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000168 int no);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000169XMLPUBFUN int XMLCALL
170 xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000171 const xmlChar *name);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000172XMLPUBFUN int XMLCALL
173 xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000174 const xmlChar *localName,
175 const xmlChar *namespaceURI);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000176XMLPUBFUN int XMLCALL
177 xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
178XMLPUBFUN int XMLCALL
179 xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
180XMLPUBFUN int XMLCALL
181 xmlTextReaderMoveToElement (xmlTextReaderPtr reader);
182XMLPUBFUN int XMLCALL
183 xmlTextReaderNormalization (xmlTextReaderPtr reader);
Daniel Veillardda46d2d2002-12-15 23:36:49 +0000184
Daniel Veillardbeb70bd2002-12-18 14:53:54 +0000185/*
186 * Extensions
187 */
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000188XMLPUBFUN int XMLCALL
189 xmlTextReaderSetParserProp (xmlTextReaderPtr reader,
Daniel Veillardbeb70bd2002-12-18 14:53:54 +0000190 int prop,
191 int value);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000192XMLPUBFUN int XMLCALL
193 xmlTextReaderGetParserProp (xmlTextReaderPtr reader,
Daniel Veillardbeb70bd2002-12-18 14:53:54 +0000194 int prop);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000195XMLPUBFUN xmlNodePtr XMLCALL
196 xmlTextReaderCurrentNode (xmlTextReaderPtr reader);
Daniel Veillard9ee35f32003-09-28 00:19:54 +0000197XMLPUBFUN xmlNodePtr XMLCALL
198 xmlTextReaderPreserve (xmlTextReaderPtr reader);
Daniel Veillard1e906612003-12-05 14:57:46 +0000199XMLPUBFUN int XMLCALL
200 xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
Daniel Veillardffa7b7e2003-12-05 16:10:21 +0000201 const xmlChar *pattern,
202 const xmlChar **namespaces);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000203XMLPUBFUN xmlDocPtr XMLCALL
204 xmlTextReaderCurrentDoc (xmlTextReaderPtr reader);
205XMLPUBFUN xmlNodePtr XMLCALL
206 xmlTextReaderExpand (xmlTextReaderPtr reader);
207XMLPUBFUN int XMLCALL
208 xmlTextReaderNext (xmlTextReaderPtr reader);
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000209XMLPUBFUN int XMLCALL
210 xmlTextReaderNextSibling (xmlTextReaderPtr reader);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000211XMLPUBFUN int XMLCALL
212 xmlTextReaderIsValid (xmlTextReaderPtr reader);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000213#ifdef LIBXML_SCHEMAS_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000214XMLPUBFUN int XMLCALL
215 xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000216 const char *rng);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000217XMLPUBFUN int XMLCALL
218 xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
Daniel Veillard33300b42003-04-17 09:09:19 +0000219 xmlRelaxNGPtr schema);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000220#endif
Daniel Veillard26f70262003-01-16 22:45:08 +0000221
222/*
Daniel Veillardfc8dc352003-10-18 09:07:46 +0000223 * New more complete APIs for simpler creation and reuse of readers
224 */
225XMLPUBFUN xmlTextReaderPtr XMLCALL
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000226 xmlReaderWalker (xmlDocPtr doc);
227XMLPUBFUN xmlTextReaderPtr XMLCALL
Daniel Veillardfc8dc352003-10-18 09:07:46 +0000228 xmlReaderForDoc (const xmlChar * cur,
229 const char *URL,
230 const char *encoding,
231 int options);
232XMLPUBFUN xmlTextReaderPtr XMLCALL
233 xmlReaderForFile (const char *filename,
234 const char *encoding,
235 int options);
236XMLPUBFUN xmlTextReaderPtr XMLCALL
237 xmlReaderForMemory (const char *buffer,
238 int size,
239 const char *URL,
240 const char *encoding,
241 int options);
242XMLPUBFUN xmlTextReaderPtr XMLCALL
243 xmlReaderForFd (int fd,
244 const char *URL,
245 const char *encoding,
246 int options);
247XMLPUBFUN xmlTextReaderPtr XMLCALL
248 xmlReaderForIO (xmlInputReadCallback ioread,
249 xmlInputCloseCallback ioclose,
250 void *ioctx,
251 const char *URL,
252 const char *encoding,
253 int options);
254
255XMLPUBFUN int XMLCALL
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000256 xmlReaderNewWalker (xmlTextReaderPtr reader,
257 xmlDocPtr doc);
258XMLPUBFUN int XMLCALL
Daniel Veillardfc8dc352003-10-18 09:07:46 +0000259 xmlReaderNewDoc (xmlTextReaderPtr reader,
260 const xmlChar * cur,
261 const char *URL,
262 const char *encoding,
263 int options);
264XMLPUBFUN int XMLCALL
265 xmlReaderNewFile (xmlTextReaderPtr reader,
266 const char *filename,
267 const char *encoding,
268 int options);
269XMLPUBFUN int XMLCALL
270 xmlReaderNewMemory (xmlTextReaderPtr reader,
271 const char *buffer,
272 int size,
273 const char *URL,
274 const char *encoding,
275 int options);
276XMLPUBFUN int XMLCALL
277 xmlReaderNewFd (xmlTextReaderPtr reader,
278 int fd,
279 const char *URL,
280 const char *encoding,
281 int options);
282XMLPUBFUN int XMLCALL
283 xmlReaderNewIO (xmlTextReaderPtr reader,
284 xmlInputReadCallback ioread,
285 xmlInputCloseCallback ioclose,
286 void *ioctx,
287 const char *URL,
288 const char *encoding,
289 int options);
290/*
Daniel Veillard26f70262003-01-16 22:45:08 +0000291 * Error handling extensions
292 */
Daniel Veillard417be3a2003-01-20 21:26:34 +0000293typedef void * xmlTextReaderLocatorPtr;
294typedef void (*xmlTextReaderErrorFunc) (void *arg,
Daniel Veillard26f70262003-01-16 22:45:08 +0000295 const char *msg,
Daniel Veillard417be3a2003-01-20 21:26:34 +0000296 xmlParserSeverities severity,
297 xmlTextReaderLocatorPtr locator);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000298XMLPUBFUN int XMLCALL
299 xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
Daniel Veillard417be3a2003-01-20 21:26:34 +0000300/*int xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000301XMLPUBFUN xmlChar * XMLCALL
302 xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
303XMLPUBFUN void XMLCALL
304 xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
Daniel Veillard26f70262003-01-16 22:45:08 +0000305 xmlTextReaderErrorFunc f,
306 void *arg);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000307XMLPUBFUN void XMLCALL
308 xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
Daniel Veillard26f70262003-01-16 22:45:08 +0000309 xmlTextReaderErrorFunc *f,
310 void **arg);
311
Daniel Veillarde1ca5032002-12-09 14:13:43 +0000312#ifdef __cplusplus
313}
314#endif
315#endif /* __XML_XMLREADER_H__ */
316