2 * Summary: the XMLReader implementation
3 * Description: API of the XML streaming API based on C# interfaces.
5 * Copy: See Copyright for the status of this software.
7 * Author: Daniel Veillard
8 * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
16 #ifndef XML_XMLREADER_H
17 #define XML_XMLREADER_H
19 #include <libxml2_tree.h>
20 #include <libxml2_xmlio.h>
22 #ifdef LIBXML_SCHEMAS_ENABLED
23 #include "libxml2_relaxng.h"
24 #include "libxml2_xmlschemas.h"
27 // XMLENGINE: This set of header was moved here from .c file
29 #ifdef LIBXML_SCHEMAS_ENABLED
30 #include "libxml2_relaxng.h"
33 #ifdef LIBXML_XINCLUDE_ENABLED
34 #include "libxml2_xinclude.h"
37 #ifdef LIBXML_PATTERN_ENABLED
38 #include "libxml2_pattern.h"
40 //----------------------------------------------------------
42 #ifdef LIBXML_READER_ENABLED
51 * Internal state values for the reader.
54 XML_TEXTREADER_MODE_INITIAL = 0,
55 XML_TEXTREADER_MODE_INTERACTIVE = 1,
56 XML_TEXTREADER_MODE_ERROR = 2,
57 XML_TEXTREADER_MODE_EOF =3,
58 XML_TEXTREADER_MODE_CLOSED = 4,
59 XML_TEXTREADER_MODE_READING = 5
63 * xmlParserProperties:
65 * Some common options to use with xmlTextReaderSetParserProp, but it
66 * is better to use xmlParserOption and the xmlReaderNewxxx and
67 * xmlReaderForxxx APIs now.
70 XML_PARSER_LOADDTD = 1,
71 XML_PARSER_DEFAULTATTRS = 2,
72 XML_PARSER_VALIDATE = 3,
73 XML_PARSER_SUBST_ENTITIES = 4
74 } xmlParserProperties;
77 * xmlParserSeverities:
79 * How severe an error callback is when the per-reader error callback API
83 XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
84 XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
85 XML_PARSER_SEVERITY_WARNING = 3,
86 XML_PARSER_SEVERITY_ERROR = 4
87 } xmlParserSeverities;
92 * Predefined constants for the different types of nodes.
95 XML_READER_TYPE_NONE = 0,
96 XML_READER_TYPE_ELEMENT = 1,
97 XML_READER_TYPE_ATTRIBUTE = 2,
98 XML_READER_TYPE_TEXT = 3,
99 XML_READER_TYPE_CDATA = 4,
100 XML_READER_TYPE_ENTITY_REFERENCE = 5,
101 XML_READER_TYPE_ENTITY = 6,
102 XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
103 XML_READER_TYPE_COMMENT = 8,
104 XML_READER_TYPE_DOCUMENT = 9,
105 XML_READER_TYPE_DOCUMENT_TYPE = 10,
106 XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
107 XML_READER_TYPE_NOTATION = 12,
108 XML_READER_TYPE_WHITESPACE = 13,
109 XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
110 XML_READER_TYPE_END_ELEMENT = 15,
111 XML_READER_TYPE_END_ENTITY = 16,
112 XML_READER_TYPE_XML_DECLARATION = 17
116 * Error handling extensions
118 typedef void * xmlTextReaderLocatorPtr;
119 typedef void (XMLCALL *xmlTextReaderErrorFunc) (void *arg,
121 xmlParserSeverities severity,
122 xmlTextReaderLocatorPtr locator);
126 * Structure for an xmlReader context.
128 typedef struct _xmlTextReader xmlTextReader;
133 * Pointer to an xmlReader context.
135 typedef xmlTextReader *xmlTextReaderPtr;
136 // XMLENGINE: This moved to header from xmlreader.c file
138 XML_TEXTREADER_NONE = -1,
139 XML_TEXTREADER_START= 0,
140 XML_TEXTREADER_ELEMENT= 1,
141 XML_TEXTREADER_END= 2,
142 XML_TEXTREADER_EMPTY= 3,
143 XML_TEXTREADER_BACKTRACK= 4,
144 XML_TEXTREADER_DONE= 5,
145 XML_TEXTREADER_ERROR= 6
146 } xmlTextReaderState;
149 XML_TEXTREADER_NOT_VALIDATE = 0,
150 XML_TEXTREADER_VALIDATE_DTD = 1,
151 XML_TEXTREADER_VALIDATE_RNG = 2,
152 XML_TEXTREADER_VALIDATE_XSD = 4
153 } xmlTextReaderValidate;
155 struct _xmlTextReader {
156 int mode; /* the parsing mode */
157 xmlDocPtr doc; /* when walking an existing doc */
158 xmlTextReaderValidate validate; /* is there any validation */
159 int allocs; /* what structure were deallocated */
160 xmlTextReaderState state;
161 xmlParserCtxtPtr ctxt; /* the parser context */
162 xmlSAXHandlerPtr sax; /* the parser SAX callbacks */
163 xmlParserInputBufferPtr input; /* the input */
164 startElementSAXFunc startElement; /* initial SAX callbacks */
165 endElementSAXFunc endElement; /* idem */
166 startElementNsSAX2Func startElementNs; /* idem */
167 endElementNsSAX2Func endElementNs; /* idem */
168 charactersSAXFunc characters;
169 cdataBlockSAXFunc cdataBlock;
170 unsigned int base; /* base of the segment in the input */
171 unsigned int cur; /* current position in the input */
172 xmlNodePtr node; /* current node */
173 xmlNodePtr curnode; /* current attribute node */
174 int depth; /* depth of the current node */
175 xmlNodePtr faketext;/* fake xmlNs chld */
176 int preserve;/* preserve the resulting document */
177 xmlBufferPtr buffer; /* used to return const xmlChar * */
178 xmlDictPtr dict; /* the context dictionnary */
180 /* entity stack when traversing entities content */
181 xmlNodePtr ent; /* Current Entity Ref Node */
182 int entNr; /* Depth of the entities stack */
183 int entMax; /* Max depth of the entities stack */
184 xmlNodePtr* entTab; /* array of entities */
187 xmlTextReaderErrorFunc errorFunc; /* callback function */
188 void* errorFuncArg; /* callback function user argument */
190 #ifdef LIBXML_SCHEMAS_ENABLED
191 /* Handling of RelaxNG validation */
192 xmlRelaxNGPtr rngSchemas; /* The Relax NG schemas */
193 xmlRelaxNGValidCtxtPtr rngValidCtxt; /* The Relax NG validation context */
194 int rngValidErrors;/* The number of errors detected */
195 xmlNodePtr rngFullNode; /* the node if RNG not progressive */
196 /* Handling of Schemas validation */
197 xmlSchemaPtr xsdSchemas; /* The Schemas schemas */
198 xmlSchemaValidCtxtPtr xsdValidCtxt;/* The Schemas validation context */
199 int xsdValidErrors;/* The number of errors detected */
200 xmlSchemaSAXPlugPtr xsdPlug; /* the schemas plug in SAX pipeline */
202 #ifdef LIBXML_XINCLUDE_ENABLED
203 /* Handling of XInclude processing */
204 int xinclude; /* is xinclude asked for */
205 const xmlChar* xinclude_name; /* the xinclude name from dict */
206 xmlXIncludeCtxtPtr xincctxt; /* the xinclude context */
207 int in_xinclude; /* counts for xinclude */
209 #ifdef LIBXML_PATTERN_ENABLED
210 int patternNr; /* number of preserve patterns */
211 int patternMax; /* max preserve patterns */
212 xmlPatternPtr* patternTab; /* array of preserve patterns */
214 int preserves; /* level of preserves */
215 int parserFlags; /* the set of options set */
216 /* Structured error handling */
217 xmlStructuredErrorFunc sErrorFunc; /* callback function */
221 * Constructors & Destructor
223 XMLPUBFUN xmlTextReaderPtr XMLCALL
224 xmlNewTextReader (xmlParserInputBufferPtr input,
226 XMLPUBFUN xmlTextReaderPtr XMLCALL
227 xmlNewTextReaderFilename(const char *URI);
228 XMLPUBFUN void XMLCALL
229 xmlFreeTextReader (xmlTextReaderPtr reader);
234 XMLPUBFUN int XMLCALL
235 xmlTextReaderRead (xmlTextReaderPtr reader);
236 XMLPUBFUN xmlChar * XMLCALL
237 xmlTextReaderReadInnerXml (xmlTextReaderPtr reader);
238 XMLPUBFUN xmlChar * XMLCALL
239 xmlTextReaderReadOuterXml (xmlTextReaderPtr reader);
240 XMLPUBFUN xmlChar * XMLCALL
241 xmlTextReaderReadString (xmlTextReaderPtr reader);
242 XMLPUBFUN int XMLCALL
243 xmlTextReaderReadAttributeValue (xmlTextReaderPtr reader);
246 * Attributes of the node
248 XMLPUBFUN int XMLCALL
249 xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
250 XMLPUBFUN int XMLCALL
251 xmlTextReaderDepth (xmlTextReaderPtr reader);
252 XMLPUBFUN int XMLCALL
253 xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
254 XMLPUBFUN int XMLCALL
255 xmlTextReaderHasValue(xmlTextReaderPtr reader);
256 XMLPUBFUN int XMLCALL
257 xmlTextReaderIsDefault (xmlTextReaderPtr reader);
258 XMLPUBFUN int XMLCALL
259 xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
260 XMLPUBFUN int XMLCALL
261 xmlTextReaderNodeType (xmlTextReaderPtr reader);
262 XMLPUBFUN int XMLCALL
263 xmlTextReaderQuoteChar (xmlTextReaderPtr reader);
264 XMLPUBFUN int XMLCALL
265 xmlTextReaderReadState (xmlTextReaderPtr reader);
266 XMLPUBFUN int XMLCALL
267 xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
269 XMLPUBFUN const xmlChar * XMLCALL
270 xmlTextReaderConstBaseUri (xmlTextReaderPtr reader);
271 XMLPUBFUN const xmlChar * XMLCALL
272 xmlTextReaderConstLocalName (xmlTextReaderPtr reader);
273 XMLPUBFUN const xmlChar * XMLCALL
274 xmlTextReaderConstName (xmlTextReaderPtr reader);
275 XMLPUBFUN const xmlChar * XMLCALL
276 xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
277 XMLPUBFUN const xmlChar * XMLCALL
278 xmlTextReaderConstPrefix (xmlTextReaderPtr reader);
279 XMLPUBFUN const xmlChar * XMLCALL
280 xmlTextReaderConstXmlLang (xmlTextReaderPtr reader);
281 XMLPUBFUN const xmlChar * XMLCALL
282 xmlTextReaderConstString (xmlTextReaderPtr reader,
284 XMLPUBFUN const xmlChar * XMLCALL
285 xmlTextReaderConstValue (xmlTextReaderPtr reader);
288 * use the Const version of the routine for
289 * better performance and simpler code
291 XMLPUBFUN xmlChar * XMLCALL
292 xmlTextReaderBaseUri (xmlTextReaderPtr reader);
293 XMLPUBFUN xmlChar * XMLCALL
294 xmlTextReaderLocalName (xmlTextReaderPtr reader);
295 XMLPUBFUN xmlChar * XMLCALL
296 xmlTextReaderName (xmlTextReaderPtr reader);
297 XMLPUBFUN xmlChar * XMLCALL
298 xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
299 XMLPUBFUN xmlChar * XMLCALL
300 xmlTextReaderPrefix (xmlTextReaderPtr reader);
301 XMLPUBFUN xmlChar * XMLCALL
302 xmlTextReaderXmlLang (xmlTextReaderPtr reader);
303 XMLPUBFUN xmlChar * XMLCALL
304 xmlTextReaderValue (xmlTextReaderPtr reader);
307 * Methods of the XmlTextReader
309 XMLPUBFUN int XMLCALL
310 xmlTextReaderClose (xmlTextReaderPtr reader);
311 XMLPUBFUN xmlChar * XMLCALL
312 xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader,
314 XMLPUBFUN xmlChar * XMLCALL
315 xmlTextReaderGetAttribute (xmlTextReaderPtr reader,
316 const xmlChar *name);
317 XMLPUBFUN xmlChar * XMLCALL
318 xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader,
319 const xmlChar *localName,
320 const xmlChar *namespaceURI);
321 XMLPUBFUN xmlParserInputBufferPtr XMLCALL
322 xmlTextReaderGetRemainder (xmlTextReaderPtr reader);
323 XMLPUBFUN xmlChar * XMLCALL
324 xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
325 const xmlChar *prefix);
326 XMLPUBFUN int XMLCALL
327 xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
329 XMLPUBFUN int XMLCALL
330 xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
331 const xmlChar *name);
332 XMLPUBFUN int XMLCALL
333 xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
334 const xmlChar *localName,
335 const xmlChar *namespaceURI);
336 XMLPUBFUN int XMLCALL
337 xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
338 XMLPUBFUN int XMLCALL
339 xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
340 XMLPUBFUN int XMLCALL
341 xmlTextReaderMoveToElement (xmlTextReaderPtr reader);
342 XMLPUBFUN int XMLCALL
343 xmlTextReaderNormalization (xmlTextReaderPtr reader);
344 XMLPUBFUN const xmlChar * XMLCALL
345 xmlTextReaderConstEncoding (xmlTextReaderPtr reader);
350 XMLPUBFUN int XMLCALL
351 xmlTextReaderSetParserProp (xmlTextReaderPtr reader,
354 XMLPUBFUN int XMLCALL
355 xmlTextReaderGetParserProp (xmlTextReaderPtr reader,
357 XMLPUBFUN xmlNodePtr XMLCALL
358 xmlTextReaderCurrentNode (xmlTextReaderPtr reader);
359 XMLPUBFUN int XMLCALL
360 xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader);
362 XMLPUBFUN int XMLCALL
363 xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader);
365 XMLPUBFUN xmlNodePtr XMLCALL
366 xmlTextReaderPreserve (xmlTextReaderPtr reader);
367 #ifdef LIBXML_PATTERN_ENABLED
368 XMLPUBFUN int XMLCALL
369 xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
370 const xmlChar *pattern,
371 const xmlChar **namespaces);
372 #endif /* LIBXML_PATTERN_ENABLED */
373 XMLPUBFUN xmlDocPtr XMLCALL
374 xmlTextReaderCurrentDoc (xmlTextReaderPtr reader);
375 XMLPUBFUN xmlNodePtr XMLCALL
376 xmlTextReaderExpand (xmlTextReaderPtr reader);
377 XMLPUBFUN int XMLCALL
378 xmlTextReaderNext (xmlTextReaderPtr reader);
379 XMLPUBFUN int XMLCALL
380 xmlTextReaderNextSibling (xmlTextReaderPtr reader);
381 XMLPUBFUN int XMLCALL
382 xmlTextReaderIsValid (xmlTextReaderPtr reader);
383 #ifdef LIBXML_SCHEMAS_ENABLED
384 XMLPUBFUN int XMLCALL
385 xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
387 XMLPUBFUN int XMLCALL
388 xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
389 xmlRelaxNGPtr schema);
390 XMLPUBFUN int XMLCALL
391 xmlTextReaderSchemaValidate (xmlTextReaderPtr reader,
393 XMLPUBFUN int XMLCALL
394 xmlTextReaderSetSchema (xmlTextReaderPtr reader,
395 xmlSchemaPtr schema);
397 XMLPUBFUN const xmlChar * XMLCALL
398 xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
399 XMLPUBFUN int XMLCALL
400 xmlTextReaderStandalone (xmlTextReaderPtr reader);
406 XMLPUBFUN long XMLCALL
407 xmlTextReaderByteConsumed (xmlTextReaderPtr reader);
410 * New more complete APIs for simpler creation and reuse of readers
412 XMLPUBFUN xmlTextReaderPtr XMLCALL
413 xmlReaderWalker (xmlDocPtr doc);
414 XMLPUBFUN xmlTextReaderPtr XMLCALL
415 xmlReaderForDoc (const xmlChar * cur,
417 const char *encoding,
419 XMLPUBFUN xmlTextReaderPtr XMLCALL
420 xmlReaderForFile (const char *filename,
421 const char *encoding,
423 XMLPUBFUN xmlTextReaderPtr XMLCALL
424 xmlReaderForMemory (const char *buffer,
427 const char *encoding,
429 XMLPUBFUN xmlTextReaderPtr XMLCALL
430 xmlReaderForFd (int fd,
432 const char *encoding,
434 XMLPUBFUN xmlTextReaderPtr XMLCALL
435 xmlReaderForIO (xmlInputReadCallback ioread,
436 xmlInputCloseCallback ioclose,
439 const char *encoding,
442 XMLPUBFUN int XMLCALL
443 xmlReaderNewWalker (xmlTextReaderPtr reader,
445 XMLPUBFUN int XMLCALL
446 xmlReaderNewDoc (xmlTextReaderPtr reader,
449 const char *encoding,
451 XMLPUBFUN int XMLCALL
452 xmlReaderNewFile (xmlTextReaderPtr reader,
453 const char *filename,
454 const char *encoding,
456 XMLPUBFUN int XMLCALL
457 xmlReaderNewMemory (xmlTextReaderPtr reader,
461 const char *encoding,
463 XMLPUBFUN int XMLCALL
464 xmlReaderNewFd (xmlTextReaderPtr reader,
467 const char *encoding,
469 XMLPUBFUN int XMLCALL
470 xmlReaderNewIO (xmlTextReaderPtr reader,
471 xmlInputReadCallback ioread,
472 xmlInputCloseCallback ioclose,
475 const char *encoding,
478 // typedefs moved in the beginning of the header
480 #ifdef LIBXML_ENABLE_NODE_LINEINFO
481 XMLPUBFUN int XMLCALL
482 xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
483 #endif /* LIBXML_ENABLE_NODE_LINEINFO */
485 XMLPUBFUN xmlChar * XMLCALL
486 xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
487 XMLPUBFUN void XMLCALL
488 xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
489 xmlTextReaderErrorFunc f,
491 XMLPUBFUN void XMLCALL
492 xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
493 xmlStructuredErrorFunc f,
495 XMLPUBFUN void XMLCALL
496 xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
497 xmlTextReaderErrorFunc *f,
504 #endif /* LIBXML_READER_ENABLED */
506 #endif /* XML_XMLREADER_H */