1 /* 2 * Summary: the XMLReader implementation 3 * Description: API of the XML streaming API based on C# interfaces. 4 * 5 * Copy: See Copyright for the status of this software. 6 * 7 * Author: Daniel Veillard 8 */ 9 10 #ifndef __XML_XMLREADER_H__ 11 #define __XML_XMLREADER_H__ 12 13 #include <libxml/xmlversion.h> 14 #include <libxml/tree.h> 15 #include <libxml/xmlerror.h> 16 #include <libxml/xmlIO.h> 17 #ifdef LIBXML_SCHEMAS_ENABLED 18 #include <libxml/relaxng.h> 19 #include <libxml/xmlschemas.h> 20 #endif 21 /* for compatibility */ 22 #include <libxml/parser.h> 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /** 29 * xmlParserSeverities: 30 * 31 * How severe an error callback is when the per-reader error callback API 32 * is used. 33 */ 34 typedef enum { 35 XML_PARSER_SEVERITY_VALIDITY_WARNING = 1, 36 XML_PARSER_SEVERITY_VALIDITY_ERROR = 2, 37 XML_PARSER_SEVERITY_WARNING = 3, 38 XML_PARSER_SEVERITY_ERROR = 4 39 } xmlParserSeverities; 40 41 #ifdef LIBXML_READER_ENABLED 42 43 /** 44 * xmlTextReaderMode: 45 * 46 * Internal state values for the reader. 47 */ 48 typedef enum { 49 XML_TEXTREADER_MODE_INITIAL = 0, 50 XML_TEXTREADER_MODE_INTERACTIVE = 1, 51 XML_TEXTREADER_MODE_ERROR = 2, 52 XML_TEXTREADER_MODE_EOF =3, 53 XML_TEXTREADER_MODE_CLOSED = 4, 54 XML_TEXTREADER_MODE_READING = 5 55 } xmlTextReaderMode; 56 57 /** 58 * xmlParserProperties: 59 * 60 * Some common options to use with xmlTextReaderSetParserProp, but it 61 * is better to use xmlParserOption and the xmlReaderNewxxx and 62 * xmlReaderForxxx APIs now. 63 */ 64 typedef enum { 65 XML_PARSER_LOADDTD = 1, 66 XML_PARSER_DEFAULTATTRS = 2, 67 XML_PARSER_VALIDATE = 3, 68 XML_PARSER_SUBST_ENTITIES = 4 69 } xmlParserProperties; 70 71 /** 72 * xmlReaderTypes: 73 * 74 * Predefined constants for the different types of nodes. 75 */ 76 typedef enum { 77 XML_READER_TYPE_NONE = 0, 78 XML_READER_TYPE_ELEMENT = 1, 79 XML_READER_TYPE_ATTRIBUTE = 2, 80 XML_READER_TYPE_TEXT = 3, 81 XML_READER_TYPE_CDATA = 4, 82 XML_READER_TYPE_ENTITY_REFERENCE = 5, 83 XML_READER_TYPE_ENTITY = 6, 84 XML_READER_TYPE_PROCESSING_INSTRUCTION = 7, 85 XML_READER_TYPE_COMMENT = 8, 86 XML_READER_TYPE_DOCUMENT = 9, 87 XML_READER_TYPE_DOCUMENT_TYPE = 10, 88 XML_READER_TYPE_DOCUMENT_FRAGMENT = 11, 89 XML_READER_TYPE_NOTATION = 12, 90 XML_READER_TYPE_WHITESPACE = 13, 91 XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14, 92 XML_READER_TYPE_END_ELEMENT = 15, 93 XML_READER_TYPE_END_ENTITY = 16, 94 XML_READER_TYPE_XML_DECLARATION = 17 95 } xmlReaderTypes; 96 97 /** 98 * xmlTextReader: 99 * 100 * Structure for an xmlReader context. 101 */ 102 typedef struct _xmlTextReader xmlTextReader; 103 104 /** 105 * xmlTextReaderPtr: 106 * 107 * Pointer to an xmlReader context. 108 */ 109 typedef xmlTextReader *xmlTextReaderPtr; 110 111 /* 112 * Constructors & Destructor 113 */ 114 XMLPUBFUN xmlTextReaderPtr 115 xmlNewTextReader (xmlParserInputBufferPtr input, 116 const char *URI); 117 XMLPUBFUN xmlTextReaderPtr 118 xmlNewTextReaderFilename(const char *URI); 119 120 XMLPUBFUN void 121 xmlFreeTextReader (xmlTextReaderPtr reader); 122 123 XMLPUBFUN int 124 xmlTextReaderSetup(xmlTextReaderPtr reader, 125 xmlParserInputBufferPtr input, const char *URL, 126 const char *encoding, int options); 127 XMLPUBFUN void 128 xmlTextReaderSetMaxAmplification(xmlTextReaderPtr reader, 129 unsigned maxAmpl); 130 131 /* 132 * Iterators 133 */ 134 XMLPUBFUN int 135 xmlTextReaderRead (xmlTextReaderPtr reader); 136 137 #ifdef LIBXML_WRITER_ENABLED 138 XMLPUBFUN xmlChar * 139 xmlTextReaderReadInnerXml(xmlTextReaderPtr reader); 140 141 XMLPUBFUN xmlChar * 142 xmlTextReaderReadOuterXml(xmlTextReaderPtr reader); 143 #endif 144 145 XMLPUBFUN xmlChar * 146 xmlTextReaderReadString (xmlTextReaderPtr reader); 147 XMLPUBFUN int 148 xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader); 149 150 /* 151 * Attributes of the node 152 */ 153 XMLPUBFUN int 154 xmlTextReaderAttributeCount(xmlTextReaderPtr reader); 155 XMLPUBFUN int 156 xmlTextReaderDepth (xmlTextReaderPtr reader); 157 XMLPUBFUN int 158 xmlTextReaderHasAttributes(xmlTextReaderPtr reader); 159 XMLPUBFUN int 160 xmlTextReaderHasValue(xmlTextReaderPtr reader); 161 XMLPUBFUN int 162 xmlTextReaderIsDefault (xmlTextReaderPtr reader); 163 XMLPUBFUN int 164 xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader); 165 XMLPUBFUN int 166 xmlTextReaderNodeType (xmlTextReaderPtr reader); 167 XMLPUBFUN int 168 xmlTextReaderQuoteChar (xmlTextReaderPtr reader); 169 XMLPUBFUN int 170 xmlTextReaderReadState (xmlTextReaderPtr reader); 171 XMLPUBFUN int 172 xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader); 173 174 XMLPUBFUN const xmlChar * 175 xmlTextReaderConstBaseUri (xmlTextReaderPtr reader); 176 XMLPUBFUN const xmlChar * 177 xmlTextReaderConstLocalName (xmlTextReaderPtr reader); 178 XMLPUBFUN const xmlChar * 179 xmlTextReaderConstName (xmlTextReaderPtr reader); 180 XMLPUBFUN const xmlChar * 181 xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader); 182 XMLPUBFUN const xmlChar * 183 xmlTextReaderConstPrefix (xmlTextReaderPtr reader); 184 XMLPUBFUN const xmlChar * 185 xmlTextReaderConstXmlLang (xmlTextReaderPtr reader); 186 XMLPUBFUN const xmlChar * 187 xmlTextReaderConstString (xmlTextReaderPtr reader, 188 const xmlChar *str); 189 XMLPUBFUN const xmlChar * 190 xmlTextReaderConstValue (xmlTextReaderPtr reader); 191 192 /* 193 * use the Const version of the routine for 194 * better performance and simpler code 195 */ 196 XMLPUBFUN xmlChar * 197 xmlTextReaderBaseUri (xmlTextReaderPtr reader); 198 XMLPUBFUN xmlChar * 199 xmlTextReaderLocalName (xmlTextReaderPtr reader); 200 XMLPUBFUN xmlChar * 201 xmlTextReaderName (xmlTextReaderPtr reader); 202 XMLPUBFUN xmlChar * 203 xmlTextReaderNamespaceUri(xmlTextReaderPtr reader); 204 XMLPUBFUN xmlChar * 205 xmlTextReaderPrefix (xmlTextReaderPtr reader); 206 XMLPUBFUN xmlChar * 207 xmlTextReaderXmlLang (xmlTextReaderPtr reader); 208 XMLPUBFUN xmlChar * 209 xmlTextReaderValue (xmlTextReaderPtr reader); 210 211 /* 212 * Methods of the XmlTextReader 213 */ 214 XMLPUBFUN int 215 xmlTextReaderClose (xmlTextReaderPtr reader); 216 XMLPUBFUN xmlChar * 217 xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader, 218 int no); 219 XMLPUBFUN xmlChar * 220 xmlTextReaderGetAttribute (xmlTextReaderPtr reader, 221 const xmlChar *name); 222 XMLPUBFUN xmlChar * 223 xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader, 224 const xmlChar *localName, 225 const xmlChar *namespaceURI); 226 XMLPUBFUN xmlParserInputBufferPtr 227 xmlTextReaderGetRemainder (xmlTextReaderPtr reader); 228 XMLPUBFUN xmlChar * 229 xmlTextReaderLookupNamespace(xmlTextReaderPtr reader, 230 const xmlChar *prefix); 231 XMLPUBFUN int 232 xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader, 233 int no); 234 XMLPUBFUN int 235 xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader, 236 const xmlChar *name); 237 XMLPUBFUN int 238 xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader, 239 const xmlChar *localName, 240 const xmlChar *namespaceURI); 241 XMLPUBFUN int 242 xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader); 243 XMLPUBFUN int 244 xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader); 245 XMLPUBFUN int 246 xmlTextReaderMoveToElement (xmlTextReaderPtr reader); 247 XMLPUBFUN int 248 xmlTextReaderNormalization (xmlTextReaderPtr reader); 249 XMLPUBFUN const xmlChar * 250 xmlTextReaderConstEncoding (xmlTextReaderPtr reader); 251 252 /* 253 * Extensions 254 */ 255 XMLPUBFUN int 256 xmlTextReaderSetParserProp (xmlTextReaderPtr reader, 257 int prop, 258 int value); 259 XMLPUBFUN int 260 xmlTextReaderGetParserProp (xmlTextReaderPtr reader, 261 int prop); 262 XMLPUBFUN xmlNodePtr 263 xmlTextReaderCurrentNode (xmlTextReaderPtr reader); 264 265 XMLPUBFUN int 266 xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader); 267 268 XMLPUBFUN int 269 xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader); 270 271 XMLPUBFUN xmlNodePtr 272 xmlTextReaderPreserve (xmlTextReaderPtr reader); 273 #ifdef LIBXML_PATTERN_ENABLED 274 XMLPUBFUN int 275 xmlTextReaderPreservePattern(xmlTextReaderPtr reader, 276 const xmlChar *pattern, 277 const xmlChar **namespaces); 278 #endif /* LIBXML_PATTERN_ENABLED */ 279 XMLPUBFUN xmlDocPtr 280 xmlTextReaderCurrentDoc (xmlTextReaderPtr reader); 281 XMLPUBFUN xmlNodePtr 282 xmlTextReaderExpand (xmlTextReaderPtr reader); 283 XMLPUBFUN int 284 xmlTextReaderNext (xmlTextReaderPtr reader); 285 XMLPUBFUN int 286 xmlTextReaderNextSibling (xmlTextReaderPtr reader); 287 XMLPUBFUN int 288 xmlTextReaderIsValid (xmlTextReaderPtr reader); 289 #ifdef LIBXML_SCHEMAS_ENABLED 290 XMLPUBFUN int 291 xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, 292 const char *rng); 293 XMLPUBFUN int 294 xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader, 295 xmlRelaxNGValidCtxtPtr ctxt, 296 int options); 297 298 XMLPUBFUN int 299 xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, 300 xmlRelaxNGPtr schema); 301 XMLPUBFUN int 302 xmlTextReaderSchemaValidate (xmlTextReaderPtr reader, 303 const char *xsd); 304 XMLPUBFUN int 305 xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader, 306 xmlSchemaValidCtxtPtr ctxt, 307 int options); 308 XMLPUBFUN int 309 xmlTextReaderSetSchema (xmlTextReaderPtr reader, 310 xmlSchemaPtr schema); 311 #endif 312 XMLPUBFUN const xmlChar * 313 xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader); 314 XMLPUBFUN int 315 xmlTextReaderStandalone (xmlTextReaderPtr reader); 316 317 318 /* 319 * Index lookup 320 */ 321 XMLPUBFUN long 322 xmlTextReaderByteConsumed (xmlTextReaderPtr reader); 323 324 /* 325 * New more complete APIs for simpler creation and reuse of readers 326 */ 327 XMLPUBFUN xmlTextReaderPtr 328 xmlReaderWalker (xmlDocPtr doc); 329 XMLPUBFUN xmlTextReaderPtr 330 xmlReaderForDoc (const xmlChar * cur, 331 const char *URL, 332 const char *encoding, 333 int options); 334 XMLPUBFUN xmlTextReaderPtr 335 xmlReaderForFile (const char *filename, 336 const char *encoding, 337 int options); 338 XMLPUBFUN xmlTextReaderPtr 339 xmlReaderForMemory (const char *buffer, 340 int size, 341 const char *URL, 342 const char *encoding, 343 int options); 344 XMLPUBFUN xmlTextReaderPtr 345 xmlReaderForFd (int fd, 346 const char *URL, 347 const char *encoding, 348 int options); 349 XMLPUBFUN xmlTextReaderPtr 350 xmlReaderForIO (xmlInputReadCallback ioread, 351 xmlInputCloseCallback ioclose, 352 void *ioctx, 353 const char *URL, 354 const char *encoding, 355 int options); 356 357 XMLPUBFUN int 358 xmlReaderNewWalker (xmlTextReaderPtr reader, 359 xmlDocPtr doc); 360 XMLPUBFUN int 361 xmlReaderNewDoc (xmlTextReaderPtr reader, 362 const xmlChar * cur, 363 const char *URL, 364 const char *encoding, 365 int options); 366 XMLPUBFUN int 367 xmlReaderNewFile (xmlTextReaderPtr reader, 368 const char *filename, 369 const char *encoding, 370 int options); 371 XMLPUBFUN int 372 xmlReaderNewMemory (xmlTextReaderPtr reader, 373 const char *buffer, 374 int size, 375 const char *URL, 376 const char *encoding, 377 int options); 378 XMLPUBFUN int 379 xmlReaderNewFd (xmlTextReaderPtr reader, 380 int fd, 381 const char *URL, 382 const char *encoding, 383 int options); 384 XMLPUBFUN int 385 xmlReaderNewIO (xmlTextReaderPtr reader, 386 xmlInputReadCallback ioread, 387 xmlInputCloseCallback ioclose, 388 void *ioctx, 389 const char *URL, 390 const char *encoding, 391 int options); 392 /* 393 * Error handling extensions 394 */ 395 typedef void * xmlTextReaderLocatorPtr; 396 397 /** 398 * xmlTextReaderErrorFunc: 399 * @arg: the user argument 400 * @msg: the message 401 * @severity: the severity of the error 402 * @locator: a locator indicating where the error occurred 403 * 404 * Signature of an error callback from a reader parser 405 */ 406 typedef void (*xmlTextReaderErrorFunc)(void *arg, 407 const char *msg, 408 xmlParserSeverities severity, 409 xmlTextReaderLocatorPtr locator); 410 XMLPUBFUN int 411 xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator); 412 XMLPUBFUN xmlChar * 413 xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator); 414 XMLPUBFUN void 415 xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader, 416 xmlTextReaderErrorFunc f, 417 void *arg); 418 XMLPUBFUN void 419 xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader, 420 xmlStructuredErrorFunc f, 421 void *arg); 422 XMLPUBFUN void 423 xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader, 424 xmlTextReaderErrorFunc *f, 425 void **arg); 426 427 #endif /* LIBXML_READER_ENABLED */ 428 429 #ifdef __cplusplus 430 } 431 #endif 432 433 #endif /* __XML_XMLREADER_H__ */ 434 435