blob: a144764fe285635a8f45e6c538b89c0ef5a3f7df [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);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000199XMLPUBFUN xmlDocPtr XMLCALL
200 xmlTextReaderCurrentDoc (xmlTextReaderPtr reader);
201XMLPUBFUN xmlNodePtr XMLCALL
202 xmlTextReaderExpand (xmlTextReaderPtr reader);
203XMLPUBFUN int XMLCALL
204 xmlTextReaderNext (xmlTextReaderPtr reader);
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000205XMLPUBFUN int XMLCALL
206 xmlTextReaderNextSibling (xmlTextReaderPtr reader);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000207XMLPUBFUN int XMLCALL
208 xmlTextReaderIsValid (xmlTextReaderPtr reader);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000209#ifdef LIBXML_SCHEMAS_ENABLED
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000210XMLPUBFUN int XMLCALL
211 xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
Daniel Veillardf4e55762003-04-15 23:32:22 +0000212 const char *rng);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000213XMLPUBFUN int XMLCALL
214 xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
Daniel Veillard33300b42003-04-17 09:09:19 +0000215 xmlRelaxNGPtr schema);
Daniel Veillardf4e55762003-04-15 23:32:22 +0000216#endif
Daniel Veillard26f70262003-01-16 22:45:08 +0000217
218/*
Daniel Veillardfc8dc352003-10-18 09:07:46 +0000219 * New more complete APIs for simpler creation and reuse of readers
220 */
221XMLPUBFUN xmlTextReaderPtr XMLCALL
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000222 xmlReaderWalker (xmlDocPtr doc);
223XMLPUBFUN xmlTextReaderPtr XMLCALL
Daniel Veillardfc8dc352003-10-18 09:07:46 +0000224 xmlReaderForDoc (const xmlChar * cur,
225 const char *URL,
226 const char *encoding,
227 int options);
228XMLPUBFUN xmlTextReaderPtr XMLCALL
229 xmlReaderForFile (const char *filename,
230 const char *encoding,
231 int options);
232XMLPUBFUN xmlTextReaderPtr XMLCALL
233 xmlReaderForMemory (const char *buffer,
234 int size,
235 const char *URL,
236 const char *encoding,
237 int options);
238XMLPUBFUN xmlTextReaderPtr XMLCALL
239 xmlReaderForFd (int fd,
240 const char *URL,
241 const char *encoding,
242 int options);
243XMLPUBFUN xmlTextReaderPtr XMLCALL
244 xmlReaderForIO (xmlInputReadCallback ioread,
245 xmlInputCloseCallback ioclose,
246 void *ioctx,
247 const char *URL,
248 const char *encoding,
249 int options);
250
251XMLPUBFUN int XMLCALL
Daniel Veillard198c1bf2003-10-20 17:07:41 +0000252 xmlReaderNewWalker (xmlTextReaderPtr reader,
253 xmlDocPtr doc);
254XMLPUBFUN int XMLCALL
Daniel Veillardfc8dc352003-10-18 09:07:46 +0000255 xmlReaderNewDoc (xmlTextReaderPtr reader,
256 const xmlChar * cur,
257 const char *URL,
258 const char *encoding,
259 int options);
260XMLPUBFUN int XMLCALL
261 xmlReaderNewFile (xmlTextReaderPtr reader,
262 const char *filename,
263 const char *encoding,
264 int options);
265XMLPUBFUN int XMLCALL
266 xmlReaderNewMemory (xmlTextReaderPtr reader,
267 const char *buffer,
268 int size,
269 const char *URL,
270 const char *encoding,
271 int options);
272XMLPUBFUN int XMLCALL
273 xmlReaderNewFd (xmlTextReaderPtr reader,
274 int fd,
275 const char *URL,
276 const char *encoding,
277 int options);
278XMLPUBFUN int XMLCALL
279 xmlReaderNewIO (xmlTextReaderPtr reader,
280 xmlInputReadCallback ioread,
281 xmlInputCloseCallback ioclose,
282 void *ioctx,
283 const char *URL,
284 const char *encoding,
285 int options);
286/*
Daniel Veillard26f70262003-01-16 22:45:08 +0000287 * Error handling extensions
288 */
Daniel Veillard417be3a2003-01-20 21:26:34 +0000289typedef void * xmlTextReaderLocatorPtr;
290typedef void (*xmlTextReaderErrorFunc) (void *arg,
Daniel Veillard26f70262003-01-16 22:45:08 +0000291 const char *msg,
Daniel Veillard417be3a2003-01-20 21:26:34 +0000292 xmlParserSeverities severity,
293 xmlTextReaderLocatorPtr locator);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000294XMLPUBFUN int XMLCALL
295 xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
Daniel Veillard417be3a2003-01-20 21:26:34 +0000296/*int xmlTextReaderLocatorLinePosition(xmlTextReaderLocatorPtr locator);*/
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000297XMLPUBFUN xmlChar * XMLCALL
298 xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
299XMLPUBFUN void XMLCALL
300 xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
Daniel Veillard26f70262003-01-16 22:45:08 +0000301 xmlTextReaderErrorFunc f,
302 void *arg);
Igor Zlatkovicaa3cfbd2003-08-27 08:59:58 +0000303XMLPUBFUN void XMLCALL
304 xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
Daniel Veillard26f70262003-01-16 22:45:08 +0000305 xmlTextReaderErrorFunc *f,
306 void **arg);
307
Daniel Veillarde1ca5032002-12-09 14:13:43 +0000308#ifdef __cplusplus
309}
310#endif
311#endif /* __XML_XMLREADER_H__ */
312