blob: 4ca3c9ae61873ad9cadcfea2d9b7a186d2cb0d2d [file] [log] [blame]
Owen Taylor3473f882001-02-23 17:55:21 +00001/*
2 * tree.h : describes the structures found in an tree resulting
3 * from an XML parsing.
4 *
5 * See Copyright for the status of this software.
6 *
Daniel Veillardc5d64342001-06-24 12:13:24 +00007 * daniel@veillard.com
Owen Taylor3473f882001-02-23 17:55:21 +00008 *
Owen Taylor3473f882001-02-23 17:55:21 +00009 */
10
11#ifndef __XML_TREE_H__
12#define __XML_TREE_H__
13
14#include <stdio.h>
15#include <libxml/xmlversion.h>
Igor Zlatkovic7ae91bc2002-11-08 17:18:52 +000016
Owen Taylor3473f882001-02-23 17:55:21 +000017#ifdef __cplusplus
18extern "C" {
19#endif
20
Daniel Veillard8bdb91d2001-10-31 17:52:43 +000021/*
22 * Some of the basic types pointer to structures:
23 */
24/* xmlIO.h */
25typedef struct _xmlParserInputBuffer xmlParserInputBuffer;
26typedef xmlParserInputBuffer *xmlParserInputBufferPtr;
27
CET 2001 Daniel Veillard5a37bde2001-11-01 14:31:22 +000028typedef struct _xmlOutputBuffer xmlOutputBuffer;
29typedef xmlOutputBuffer *xmlOutputBufferPtr;
30
Daniel Veillard8bdb91d2001-10-31 17:52:43 +000031/* parser.h */
32typedef struct _xmlParserInput xmlParserInput;
33typedef xmlParserInput *xmlParserInputPtr;
34
35typedef struct _xmlParserCtxt xmlParserCtxt;
36typedef xmlParserCtxt *xmlParserCtxtPtr;
37
Daniel Veillard6c4ffaf2002-02-11 08:54:05 +000038typedef struct _xmlSAXLocator xmlSAXLocator;
39typedef xmlSAXLocator *xmlSAXLocatorPtr;
40
41typedef struct _xmlSAXHandler xmlSAXHandler;
42typedef xmlSAXHandler *xmlSAXHandlerPtr;
43
44/* entities.h */
45typedef struct _xmlEntity xmlEntity;
46typedef xmlEntity *xmlEntityPtr;
47
Daniel Veillard9d06d302002-01-22 18:15:52 +000048/**
49 * BASE_BUFFER_SIZE:
50 *
Daniel Veillard61f26172002-03-12 18:46:39 +000051 * default buffer size 4000.
Daniel Veillard9d06d302002-01-22 18:15:52 +000052 */
Daniel Veillardd0463562001-10-13 09:15:48 +000053#define BASE_BUFFER_SIZE 4000
54
Daniel Veillard5e2dace2001-07-18 19:30:27 +000055/**
56 * XML_XML_NAMESPACE:
57 *
58 * This is the namespace for the special xml: prefix predefined in the
Daniel Veillard61f26172002-03-12 18:46:39 +000059 * XML Namespace specification.
Daniel Veillard5e2dace2001-07-18 19:30:27 +000060 */
Owen Taylor3473f882001-02-23 17:55:21 +000061#define XML_XML_NAMESPACE \
62 (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
63
64/*
Daniel Veillard61f26172002-03-12 18:46:39 +000065 * The different element types carried by an XML tree.
Owen Taylor3473f882001-02-23 17:55:21 +000066 *
67 * NOTE: This is synchronized with DOM Level1 values
68 * See http://www.w3.org/TR/REC-DOM-Level-1/
69 *
70 * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
71 * be deprecated to use an XML_DTD_NODE.
72 */
73typedef enum {
74 XML_ELEMENT_NODE= 1,
75 XML_ATTRIBUTE_NODE= 2,
76 XML_TEXT_NODE= 3,
77 XML_CDATA_SECTION_NODE= 4,
78 XML_ENTITY_REF_NODE= 5,
79 XML_ENTITY_NODE= 6,
80 XML_PI_NODE= 7,
81 XML_COMMENT_NODE= 8,
82 XML_DOCUMENT_NODE= 9,
83 XML_DOCUMENT_TYPE_NODE= 10,
84 XML_DOCUMENT_FRAG_NODE= 11,
85 XML_NOTATION_NODE= 12,
86 XML_HTML_DOCUMENT_NODE= 13,
87 XML_DTD_NODE= 14,
88 XML_ELEMENT_DECL= 15,
89 XML_ATTRIBUTE_DECL= 16,
90 XML_ENTITY_DECL= 17,
91 XML_NAMESPACE_DECL= 18,
92 XML_XINCLUDE_START= 19,
93 XML_XINCLUDE_END= 20
Daniel Veillardeae522a2001-04-23 13:41:34 +000094#ifdef LIBXML_DOCB_ENABLED
95 ,XML_DOCB_DOCUMENT_NODE= 21
Owen Taylor3473f882001-02-23 17:55:21 +000096#endif
97} xmlElementType;
98
Daniel Veillardbed7b052001-05-19 14:59:49 +000099/**
100 * xmlChar:
Owen Taylor3473f882001-02-23 17:55:21 +0000101 *
Daniel Veillardbed7b052001-05-19 14:59:49 +0000102 * This is a basic byte in an UTF-8 encoded string.
103 * It's unsigned allowing to pinpoint case where char * are assigned
104 * to xmlChar * (possibly making serialization back impossible).
Owen Taylor3473f882001-02-23 17:55:21 +0000105 */
106
107typedef unsigned char xmlChar;
108
Daniel Veillardbed7b052001-05-19 14:59:49 +0000109/**
110 * BAD_CAST:
111 *
112 * Macro to cast a string to an xmlChar * when one know its safe.
113 */
Owen Taylor3473f882001-02-23 17:55:21 +0000114#define BAD_CAST (xmlChar *)
115
Daniel Veillardbed7b052001-05-19 14:59:49 +0000116/**
117 * xmlNotation:
118 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000119 * A DTD Notation definition.
Owen Taylor3473f882001-02-23 17:55:21 +0000120 */
121
122typedef struct _xmlNotation xmlNotation;
123typedef xmlNotation *xmlNotationPtr;
124struct _xmlNotation {
Daniel Veillard9e7160d2001-03-18 23:17:47 +0000125 const xmlChar *name; /* Notation name */
Owen Taylor3473f882001-02-23 17:55:21 +0000126 const xmlChar *PublicID; /* Public identifier, if any */
127 const xmlChar *SystemID; /* System identifier, if any */
128};
129
Daniel Veillardbed7b052001-05-19 14:59:49 +0000130/**
131 * xmlAttributeType:
132 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000133 * A DTD Attribute type definition.
Owen Taylor3473f882001-02-23 17:55:21 +0000134 */
135
136typedef enum {
137 XML_ATTRIBUTE_CDATA = 1,
138 XML_ATTRIBUTE_ID,
139 XML_ATTRIBUTE_IDREF ,
140 XML_ATTRIBUTE_IDREFS,
141 XML_ATTRIBUTE_ENTITY,
142 XML_ATTRIBUTE_ENTITIES,
143 XML_ATTRIBUTE_NMTOKEN,
144 XML_ATTRIBUTE_NMTOKENS,
145 XML_ATTRIBUTE_ENUMERATION,
146 XML_ATTRIBUTE_NOTATION
147} xmlAttributeType;
148
Daniel Veillardbed7b052001-05-19 14:59:49 +0000149/**
150 * xmlAttributeDefault:
151 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000152 * A DTD Attribute default definition.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000153 */
154
Owen Taylor3473f882001-02-23 17:55:21 +0000155typedef enum {
156 XML_ATTRIBUTE_NONE = 1,
157 XML_ATTRIBUTE_REQUIRED,
158 XML_ATTRIBUTE_IMPLIED,
159 XML_ATTRIBUTE_FIXED
160} xmlAttributeDefault;
161
Daniel Veillardbed7b052001-05-19 14:59:49 +0000162/**
163 * xmlEnumeration:
164 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000165 * List structure used when there is an enumeration in DTDs.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000166 */
167
Owen Taylor3473f882001-02-23 17:55:21 +0000168typedef struct _xmlEnumeration xmlEnumeration;
169typedef xmlEnumeration *xmlEnumerationPtr;
170struct _xmlEnumeration {
171 struct _xmlEnumeration *next; /* next one */
172 const xmlChar *name; /* Enumeration name */
173};
174
Daniel Veillardbed7b052001-05-19 14:59:49 +0000175/**
176 * xmlAttribute:
177 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000178 * An Attribute declaration in a DTD.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000179 */
180
Owen Taylor3473f882001-02-23 17:55:21 +0000181typedef struct _xmlAttribute xmlAttribute;
182typedef xmlAttribute *xmlAttributePtr;
183struct _xmlAttribute {
Daniel Veillard0ec98632001-11-14 15:04:32 +0000184 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000185 xmlElementType type; /* XML_ATTRIBUTE_DECL, must be second ! */
186 const xmlChar *name; /* Attribute name */
187 struct _xmlNode *children; /* NULL */
188 struct _xmlNode *last; /* NULL */
189 struct _xmlDtd *parent; /* -> DTD */
190 struct _xmlNode *next; /* next sibling link */
191 struct _xmlNode *prev; /* previous sibling link */
192 struct _xmlDoc *doc; /* the containing document */
193
194 struct _xmlAttribute *nexth; /* next in hash table */
195 xmlAttributeType atype; /* The attribute type */
196 xmlAttributeDefault def; /* the default */
197 const xmlChar *defaultValue; /* or the default value */
198 xmlEnumerationPtr tree; /* or the enumeration tree if any */
199 const xmlChar *prefix; /* the namespace prefix if any */
200 const xmlChar *elem; /* Element holding the attribute */
201};
202
Daniel Veillardbed7b052001-05-19 14:59:49 +0000203/**
204 * xmlElementContentType:
205 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000206 * Possible definitions of element content types.
Owen Taylor3473f882001-02-23 17:55:21 +0000207 */
208typedef enum {
209 XML_ELEMENT_CONTENT_PCDATA = 1,
210 XML_ELEMENT_CONTENT_ELEMENT,
211 XML_ELEMENT_CONTENT_SEQ,
212 XML_ELEMENT_CONTENT_OR
213} xmlElementContentType;
214
Daniel Veillardbed7b052001-05-19 14:59:49 +0000215/**
216 * xmlElementContentOccur:
217 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000218 * Possible definitions of element content occurrences.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000219 */
Owen Taylor3473f882001-02-23 17:55:21 +0000220typedef enum {
221 XML_ELEMENT_CONTENT_ONCE = 1,
222 XML_ELEMENT_CONTENT_OPT,
223 XML_ELEMENT_CONTENT_MULT,
224 XML_ELEMENT_CONTENT_PLUS
225} xmlElementContentOccur;
226
Daniel Veillardbed7b052001-05-19 14:59:49 +0000227/**
228 * xmlElementContent:
229 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000230 * An XML Element content as stored after parsing an element definition
Daniel Veillardbed7b052001-05-19 14:59:49 +0000231 * in a DTD.
232 */
233
Owen Taylor3473f882001-02-23 17:55:21 +0000234typedef struct _xmlElementContent xmlElementContent;
235typedef xmlElementContent *xmlElementContentPtr;
236struct _xmlElementContent {
237 xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
238 xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
Daniel Veillardbe480fb2001-11-08 23:36:42 +0000239 const xmlChar *name; /* Element name */
Owen Taylor3473f882001-02-23 17:55:21 +0000240 struct _xmlElementContent *c1; /* first child */
241 struct _xmlElementContent *c2; /* second child */
Daniel Veillarddab4cb32001-04-20 13:03:48 +0000242 struct _xmlElementContent *parent; /* parent */
Daniel Veillarda9b66d02002-12-11 14:23:49 +0000243 const xmlChar *prefix; /* Namespace prefix */
Owen Taylor3473f882001-02-23 17:55:21 +0000244};
245
Daniel Veillardbed7b052001-05-19 14:59:49 +0000246/**
247 * xmlElementTypeVal:
248 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000249 * The different possibilities for an element content type.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000250 */
251
Owen Taylor3473f882001-02-23 17:55:21 +0000252typedef enum {
Daniel Veillarda10efa82001-04-18 13:09:01 +0000253 XML_ELEMENT_TYPE_UNDEFINED = 0,
Owen Taylor3473f882001-02-23 17:55:21 +0000254 XML_ELEMENT_TYPE_EMPTY = 1,
255 XML_ELEMENT_TYPE_ANY,
256 XML_ELEMENT_TYPE_MIXED,
257 XML_ELEMENT_TYPE_ELEMENT
258} xmlElementTypeVal;
259
Daniel Veillardaeb258a2002-09-13 14:48:12 +0000260
261#ifdef __cplusplus
262}
263#endif
264#include <libxml/xmlregexp.h>
265#ifdef __cplusplus
266extern "C" {
267#endif
268
Daniel Veillardbed7b052001-05-19 14:59:49 +0000269/**
270 * xmlElement:
271 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000272 * An XML Element declaration from a DTD.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000273 */
274
Owen Taylor3473f882001-02-23 17:55:21 +0000275typedef struct _xmlElement xmlElement;
276typedef xmlElement *xmlElementPtr;
277struct _xmlElement {
Daniel Veillard0ec98632001-11-14 15:04:32 +0000278 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000279 xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */
280 const xmlChar *name; /* Element name */
281 struct _xmlNode *children; /* NULL */
282 struct _xmlNode *last; /* NULL */
283 struct _xmlDtd *parent; /* -> DTD */
284 struct _xmlNode *next; /* next sibling link */
285 struct _xmlNode *prev; /* previous sibling link */
286 struct _xmlDoc *doc; /* the containing document */
287
288 xmlElementTypeVal etype; /* The type */
289 xmlElementContentPtr content; /* the allowed element content */
290 xmlAttributePtr attributes; /* List of the declared attributes */
291 const xmlChar *prefix; /* the namespace prefix if any */
Daniel Veillardaeb258a2002-09-13 14:48:12 +0000292#ifdef LIBXML_REGEXP_ENABLED
293 xmlRegexpPtr contModel; /* the validating regexp */
294#else
295 void *contModel;
296#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000297};
298
Daniel Veillardbed7b052001-05-19 14:59:49 +0000299
Daniel Veillard5e2dace2001-07-18 19:30:27 +0000300/**
301 * XML_LOCAL_NAMESPACE:
302 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000303 * A namespace declaration node.
Daniel Veillard5e2dace2001-07-18 19:30:27 +0000304 */
Daniel Veillardbed7b052001-05-19 14:59:49 +0000305#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
306typedef xmlElementType xmlNsType;
307
308/**
309 * xmlNs:
310 *
Owen Taylor3473f882001-02-23 17:55:21 +0000311 * An XML namespace.
312 * Note that prefix == NULL is valid, it defines the default namespace
Daniel Veillardd1640922001-12-17 15:30:10 +0000313 * within the subtree (until overridden).
Owen Taylor3473f882001-02-23 17:55:21 +0000314 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000315 * xmlNsType is unified with xmlElementType.
Owen Taylor3473f882001-02-23 17:55:21 +0000316 */
317
Owen Taylor3473f882001-02-23 17:55:21 +0000318typedef struct _xmlNs xmlNs;
319typedef xmlNs *xmlNsPtr;
320struct _xmlNs {
321 struct _xmlNs *next; /* next Ns link for this node */
322 xmlNsType type; /* global or local */
323 const xmlChar *href; /* URL for the namespace */
324 const xmlChar *prefix; /* prefix for the namespace */
PDT 2002 Aleksey Sanin8e8a7032002-07-22 18:03:11 +0000325 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000326};
327
Daniel Veillardbed7b052001-05-19 14:59:49 +0000328/**
329 * xmlDtd:
330 *
Daniel Veillardd1640922001-12-17 15:30:10 +0000331 * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
Daniel Veillard61f26172002-03-12 18:46:39 +0000332 * the internal subset and for the external subset.
Owen Taylor3473f882001-02-23 17:55:21 +0000333 */
334typedef struct _xmlDtd xmlDtd;
335typedef xmlDtd *xmlDtdPtr;
336struct _xmlDtd {
Daniel Veillard0ec98632001-11-14 15:04:32 +0000337 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000338 xmlElementType type; /* XML_DTD_NODE, must be second ! */
339 const xmlChar *name; /* Name of the DTD */
340 struct _xmlNode *children; /* the value of the property link */
341 struct _xmlNode *last; /* last child link */
342 struct _xmlDoc *parent; /* child->parent link */
343 struct _xmlNode *next; /* next sibling link */
344 struct _xmlNode *prev; /* previous sibling link */
345 struct _xmlDoc *doc; /* the containing document */
346
347 /* End of common part */
348 void *notations; /* Hash table for notations if any */
349 void *elements; /* Hash table for elements if any */
350 void *attributes; /* Hash table for attributes if any */
351 void *entities; /* Hash table for entities if any */
352 const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */
353 const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
354 void *pentities; /* Hash table for param entities if any */
355};
356
Daniel Veillardbed7b052001-05-19 14:59:49 +0000357/**
358 * xmlAttr:
359 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000360 * An attribute on an XML node.
Owen Taylor3473f882001-02-23 17:55:21 +0000361 */
362typedef struct _xmlAttr xmlAttr;
363typedef xmlAttr *xmlAttrPtr;
364struct _xmlAttr {
Daniel Veillard0ec98632001-11-14 15:04:32 +0000365 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000366 xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */
367 const xmlChar *name; /* the name of the property */
368 struct _xmlNode *children; /* the value of the property */
369 struct _xmlNode *last; /* NULL */
370 struct _xmlNode *parent; /* child->parent link */
371 struct _xmlAttr *next; /* next sibling link */
372 struct _xmlAttr *prev; /* previous sibling link */
373 struct _xmlDoc *doc; /* the containing document */
374 xmlNs *ns; /* pointer to the associated namespace */
375 xmlAttributeType atype; /* the attribute type if validating */
376};
377
Daniel Veillardbed7b052001-05-19 14:59:49 +0000378/**
379 * xmlID:
380 *
Owen Taylor3473f882001-02-23 17:55:21 +0000381 * An XML ID instance.
382 */
383
384typedef struct _xmlID xmlID;
385typedef xmlID *xmlIDPtr;
386struct _xmlID {
387 struct _xmlID *next; /* next ID */
388 const xmlChar *value; /* The ID name */
Daniel Veillardd1640922001-12-17 15:30:10 +0000389 xmlAttrPtr attr; /* The attribute holding it */
Daniel Veillardea7751d2002-12-20 00:16:24 +0000390 const xmlChar *name; /* The attribute if attr is not available */
391 int lineno; /* The line number if attr is not available */
Owen Taylor3473f882001-02-23 17:55:21 +0000392};
393
Daniel Veillardbed7b052001-05-19 14:59:49 +0000394/**
395 * xmlRef:
396 *
Owen Taylor3473f882001-02-23 17:55:21 +0000397 * An XML IDREF instance.
398 */
399
400typedef struct _xmlRef xmlRef;
401typedef xmlRef *xmlRefPtr;
402struct _xmlRef {
403 struct _xmlRef *next; /* next Ref */
404 const xmlChar *value; /* The Ref name */
Daniel Veillardd1640922001-12-17 15:30:10 +0000405 xmlAttrPtr attr; /* The attribute holding it */
Daniel Veillardea7751d2002-12-20 00:16:24 +0000406 const xmlChar *name; /* The attribute if attr is not available */
407 int lineno; /* The line number if attr is not available */
Owen Taylor3473f882001-02-23 17:55:21 +0000408};
409
Daniel Veillardbed7b052001-05-19 14:59:49 +0000410/**
411 * xmlBufferAllocationScheme:
412 *
413 * A buffer allocation scheme can be defined to either match exactly the
Daniel Veillard61f26172002-03-12 18:46:39 +0000414 * need or double it's allocated size each time it is found too small.
Owen Taylor3473f882001-02-23 17:55:21 +0000415 */
416
417typedef enum {
418 XML_BUFFER_ALLOC_DOUBLEIT,
Daniel Veillard561b7f82002-03-20 21:55:57 +0000419 XML_BUFFER_ALLOC_EXACT
Owen Taylor3473f882001-02-23 17:55:21 +0000420} xmlBufferAllocationScheme;
421
Daniel Veillardbed7b052001-05-19 14:59:49 +0000422/**
423 * xmlBuffer:
424 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000425 * A buffer structure.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000426 */
Owen Taylor3473f882001-02-23 17:55:21 +0000427typedef struct _xmlBuffer xmlBuffer;
428typedef xmlBuffer *xmlBufferPtr;
429struct _xmlBuffer {
430 xmlChar *content; /* The buffer content UTF8 */
431 unsigned int use; /* The buffer size used */
432 unsigned int size; /* The buffer size */
433 xmlBufferAllocationScheme alloc; /* The realloc method */
434};
435
Daniel Veillardf69bb4b2001-05-19 13:24:56 +0000436/**
437 * xmlNode:
438 *
Owen Taylor3473f882001-02-23 17:55:21 +0000439 * A node in an XML tree.
440 */
441typedef struct _xmlNode xmlNode;
442typedef xmlNode *xmlNodePtr;
443struct _xmlNode {
Daniel Veillard0ec98632001-11-14 15:04:32 +0000444 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000445 xmlElementType type; /* type number, must be second ! */
446 const xmlChar *name; /* the name of the node, or the entity */
447 struct _xmlNode *children; /* parent->childs link */
448 struct _xmlNode *last; /* last child link */
449 struct _xmlNode *parent; /* child->parent link */
450 struct _xmlNode *next; /* next sibling link */
451 struct _xmlNode *prev; /* previous sibling link */
452 struct _xmlDoc *doc; /* the containing document */
Daniel Veillardcbaf3992001-12-31 16:16:02 +0000453
454 /* End of common part */
Owen Taylor3473f882001-02-23 17:55:21 +0000455 xmlNs *ns; /* pointer to the associated namespace */
Owen Taylor3473f882001-02-23 17:55:21 +0000456 xmlChar *content; /* the content */
Owen Taylor3473f882001-02-23 17:55:21 +0000457 struct _xmlAttr *properties;/* properties list */
458 xmlNs *nsDef; /* namespace definitions on this node */
459};
460
Daniel Veillard5e2dace2001-07-18 19:30:27 +0000461/**
462 * XML_GET_CONTENT:
463 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000464 * Macro to extract the content pointer of a node.
Daniel Veillard5e2dace2001-07-18 19:30:27 +0000465 */
466#define XML_GET_CONTENT(n) \
Daniel Veillard566d4df2001-11-22 13:00:53 +0000467 ((n)->type == XML_ELEMENT_NODE ? NULL : (n)->content)
Daniel Veillard5e2dace2001-07-18 19:30:27 +0000468
469/**
470 * XML_GET_LINE:
471 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000472 * Macro to extract the line number of an element node.
Daniel Veillard566d4df2001-11-22 13:00:53 +0000473 * This will work only if line numbering is activated by
Daniel Veillard61f26172002-03-12 18:46:39 +0000474 * calling xmlLineNumbersDefault(1) before parsing.
Daniel Veillard5e2dace2001-07-18 19:30:27 +0000475 */
476#define XML_GET_LINE(n) \
Daniel Veillard566d4df2001-11-22 13:00:53 +0000477 ((n)->type == XML_ELEMENT_NODE ? (int) (n)->content : 0)
Daniel Veillard7db37732001-07-12 01:20:08 +0000478
Daniel Veillardbed7b052001-05-19 14:59:49 +0000479/**
480 * xmlDoc:
481 *
Owen Taylor3473f882001-02-23 17:55:21 +0000482 * An XML document.
483 */
484typedef struct _xmlDoc xmlDoc;
485typedef xmlDoc *xmlDocPtr;
486struct _xmlDoc {
Daniel Veillard0ec98632001-11-14 15:04:32 +0000487 void *_private; /* application data */
Owen Taylor3473f882001-02-23 17:55:21 +0000488 xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
489 char *name; /* name/filename/URI of the document */
490 struct _xmlNode *children; /* the document tree */
491 struct _xmlNode *last; /* last child link */
492 struct _xmlNode *parent; /* child->parent link */
493 struct _xmlNode *next; /* next sibling link */
494 struct _xmlNode *prev; /* previous sibling link */
495 struct _xmlDoc *doc; /* autoreference to itself */
496
497 /* End of common part */
498 int compression;/* level of zlib compression */
499 int standalone; /* standalone document (no external refs) */
500 struct _xmlDtd *intSubset; /* the document internal subset */
501 struct _xmlDtd *extSubset; /* the document external subset */
502 struct _xmlNs *oldNs; /* Global namespace, the old way */
503 const xmlChar *version; /* the XML version string */
504 const xmlChar *encoding; /* external initial encoding, if any */
505 void *ids; /* Hash table for ID attributes if any */
506 void *refs; /* Hash table for IDREFs attributes if any */
507 const xmlChar *URL; /* The URI for that document */
508 int charset; /* encoding of the in-memory content
509 actually an xmlCharEncoding */
510};
511
Daniel Veillardbed7b052001-05-19 14:59:49 +0000512/**
513 * xmlChildrenNode:
514 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000515 * Macro for compatibility naming layer with libxml1.
Owen Taylor3473f882001-02-23 17:55:21 +0000516 */
517#ifndef xmlChildrenNode
518#define xmlChildrenNode children
Daniel Veillardbed7b052001-05-19 14:59:49 +0000519#endif
520
521/**
522 * xmlRootNode:
523 *
Daniel Veillard61f26172002-03-12 18:46:39 +0000524 * Macro for compatibility naming layer with libxml1.
Daniel Veillardbed7b052001-05-19 14:59:49 +0000525 */
526#ifndef xmlRootNode
Owen Taylor3473f882001-02-23 17:55:21 +0000527#define xmlRootNode children
528#endif
529
530/*
531 * Variables.
532 */
Daniel Veillard0ba59232002-02-10 13:20:39 +0000533#if 0
Owen Taylor3473f882001-02-23 17:55:21 +0000534LIBXML_DLL_IMPORT extern int oldXMLWDcompatibility;/* maintain compatibility with old WD */
535LIBXML_DLL_IMPORT extern int xmlIndentTreeOutput; /* try to indent the tree dumps */
536LIBXML_DLL_IMPORT extern xmlBufferAllocationScheme xmlBufferAllocScheme; /* alloc scheme to use */
Daniel Veillarde356c282001-03-10 12:32:04 +0000537LIBXML_DLL_IMPORT extern int xmlSaveNoEmptyTags; /* save empty tags as <empty></empty> */
538LIBXML_DLL_IMPORT extern int xmlDefaultBufferSize; /* default buffer size */
Daniel Veillard0ba59232002-02-10 13:20:39 +0000539#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000540
Daniel Veillardc00cda82003-04-07 10:22:39 +0000541/*
542 * Some helper functions
543 */
544int xmlValidateNCName (const xmlChar *value,
545 int space);
546int xmlValidateQName (const xmlChar *value,
547 int space);
548int xmlValidateName (const xmlChar *value,
549 int space);
550int xmlValidateNMToken (const xmlChar *value,
551 int space);
Daniel Veillardd4310742003-02-18 21:12:46 +0000552
Daniel Veillardc00cda82003-04-07 10:22:39 +0000553xmlChar * xmlBuildQName (const xmlChar *ncname,
554 const xmlChar *prefix,
555 xmlChar *memory,
556 int len);
557xmlChar * xmlSplitQName2 (const xmlChar *name,
558 xmlChar **prefix);
Daniel Veillard8d73bcb2003-08-04 01:06:15 +0000559const xmlChar * xmlSplitQName3 (const xmlChar *name,
560 int *len);
561
Owen Taylor3473f882001-02-23 17:55:21 +0000562/*
563 * Handling Buffers.
564 */
565
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000566void xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
567xmlBufferAllocationScheme xmlGetBufferAllocationScheme(void);
568
Owen Taylor3473f882001-02-23 17:55:21 +0000569xmlBufferPtr xmlBufferCreate (void);
570xmlBufferPtr xmlBufferCreateSize (size_t size);
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000571int xmlBufferResize (xmlBufferPtr buf,
572 unsigned int size);
Owen Taylor3473f882001-02-23 17:55:21 +0000573void xmlBufferFree (xmlBufferPtr buf);
574int xmlBufferDump (FILE *file,
575 xmlBufferPtr buf);
576void xmlBufferAdd (xmlBufferPtr buf,
577 const xmlChar *str,
578 int len);
579void xmlBufferAddHead (xmlBufferPtr buf,
580 const xmlChar *str,
581 int len);
582void xmlBufferCat (xmlBufferPtr buf,
583 const xmlChar *str);
584void xmlBufferCCat (xmlBufferPtr buf,
585 const char *str);
586int xmlBufferShrink (xmlBufferPtr buf,
587 unsigned int len);
588int xmlBufferGrow (xmlBufferPtr buf,
589 unsigned int len);
590void xmlBufferEmpty (xmlBufferPtr buf);
591const xmlChar* xmlBufferContent (const xmlBufferPtr buf);
Owen Taylor3473f882001-02-23 17:55:21 +0000592void xmlBufferSetAllocationScheme(xmlBufferPtr buf,
593 xmlBufferAllocationScheme scheme);
594int xmlBufferLength (const xmlBufferPtr buf);
595
596/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000597 * Creating/freeing new structures.
Owen Taylor3473f882001-02-23 17:55:21 +0000598 */
599xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc,
600 const xmlChar *name,
601 const xmlChar *ExternalID,
602 const xmlChar *SystemID);
603xmlDtdPtr xmlNewDtd (xmlDocPtr doc,
604 const xmlChar *name,
605 const xmlChar *ExternalID,
606 const xmlChar *SystemID);
607xmlDtdPtr xmlGetIntSubset (xmlDocPtr doc);
608void xmlFreeDtd (xmlDtdPtr cur);
609xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc,
610 const xmlChar *href,
611 const xmlChar *prefix);
612xmlNsPtr xmlNewNs (xmlNodePtr node,
613 const xmlChar *href,
614 const xmlChar *prefix);
615void xmlFreeNs (xmlNsPtr cur);
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000616void xmlFreeNsList (xmlNsPtr cur);
Owen Taylor3473f882001-02-23 17:55:21 +0000617xmlDocPtr xmlNewDoc (const xmlChar *version);
618void xmlFreeDoc (xmlDocPtr cur);
619xmlAttrPtr xmlNewDocProp (xmlDocPtr doc,
620 const xmlChar *name,
621 const xmlChar *value);
622xmlAttrPtr xmlNewProp (xmlNodePtr node,
623 const xmlChar *name,
624 const xmlChar *value);
625xmlAttrPtr xmlNewNsProp (xmlNodePtr node,
626 xmlNsPtr ns,
627 const xmlChar *name,
628 const xmlChar *value);
Daniel Veillard46de64e2002-05-29 08:21:33 +0000629xmlAttrPtr xmlNewNsPropEatName (xmlNodePtr node,
630 xmlNsPtr ns,
631 xmlChar *name,
632 const xmlChar *value);
Owen Taylor3473f882001-02-23 17:55:21 +0000633void xmlFreePropList (xmlAttrPtr cur);
634void xmlFreeProp (xmlAttrPtr cur);
635xmlAttrPtr xmlCopyProp (xmlNodePtr target,
636 xmlAttrPtr cur);
637xmlAttrPtr xmlCopyPropList (xmlNodePtr target,
638 xmlAttrPtr cur);
639xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd);
640xmlDocPtr xmlCopyDoc (xmlDocPtr doc,
641 int recursive);
642
643/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000644 * Creating new nodes.
Owen Taylor3473f882001-02-23 17:55:21 +0000645 */
646xmlNodePtr xmlNewDocNode (xmlDocPtr doc,
647 xmlNsPtr ns,
648 const xmlChar *name,
649 const xmlChar *content);
Daniel Veillard46de64e2002-05-29 08:21:33 +0000650xmlNodePtr xmlNewDocNodeEatName (xmlDocPtr doc,
651 xmlNsPtr ns,
652 xmlChar *name,
653 const xmlChar *content);
Owen Taylor3473f882001-02-23 17:55:21 +0000654xmlNodePtr xmlNewDocRawNode (xmlDocPtr doc,
655 xmlNsPtr ns,
656 const xmlChar *name,
657 const xmlChar *content);
658xmlNodePtr xmlNewNode (xmlNsPtr ns,
659 const xmlChar *name);
Daniel Veillard46de64e2002-05-29 08:21:33 +0000660xmlNodePtr xmlNewNodeEatName (xmlNsPtr ns,
661 xmlChar *name);
Owen Taylor3473f882001-02-23 17:55:21 +0000662xmlNodePtr xmlNewChild (xmlNodePtr parent,
663 xmlNsPtr ns,
664 const xmlChar *name,
665 const xmlChar *content);
666xmlNodePtr xmlNewTextChild (xmlNodePtr parent,
667 xmlNsPtr ns,
668 const xmlChar *name,
669 const xmlChar *content);
670xmlNodePtr xmlNewDocText (xmlDocPtr doc,
671 const xmlChar *content);
672xmlNodePtr xmlNewText (const xmlChar *content);
673xmlNodePtr xmlNewPI (const xmlChar *name,
674 const xmlChar *content);
675xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc,
676 const xmlChar *content,
677 int len);
678xmlNodePtr xmlNewTextLen (const xmlChar *content,
679 int len);
680xmlNodePtr xmlNewDocComment (xmlDocPtr doc,
681 const xmlChar *content);
682xmlNodePtr xmlNewComment (const xmlChar *content);
683xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc,
684 const xmlChar *content,
685 int len);
686xmlNodePtr xmlNewCharRef (xmlDocPtr doc,
687 const xmlChar *name);
688xmlNodePtr xmlNewReference (xmlDocPtr doc,
689 const xmlChar *name);
Daniel Veillard2ebd7a72001-08-28 21:07:03 +0000690xmlNodePtr xmlCopyNode (const xmlNodePtr node,
Owen Taylor3473f882001-02-23 17:55:21 +0000691 int recursive);
Igor Zlatkovic648b8e92002-04-17 18:35:57 +0000692xmlNodePtr xmlDocCopyNode (const xmlNodePtr node,
Daniel Veillard82daa812001-04-12 08:55:36 +0000693 xmlDocPtr doc,
694 int recursive);
Igor Zlatkovic648b8e92002-04-17 18:35:57 +0000695xmlNodePtr xmlCopyNodeList (const xmlNodePtr node);
Owen Taylor3473f882001-02-23 17:55:21 +0000696xmlNodePtr xmlNewDocFragment (xmlDocPtr doc);
697
698/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000699 * Navigating.
Owen Taylor3473f882001-02-23 17:55:21 +0000700 */
Daniel Veillard8faa7832001-11-26 15:58:08 +0000701long xmlGetLineNo (xmlNodePtr node);
702xmlChar * xmlGetNodePath (xmlNodePtr node);
Owen Taylor3473f882001-02-23 17:55:21 +0000703xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc);
704xmlNodePtr xmlGetLastChild (xmlNodePtr parent);
705int xmlNodeIsText (xmlNodePtr node);
706int xmlIsBlankNode (xmlNodePtr node);
707
708/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000709 * Changing the structure.
Owen Taylor3473f882001-02-23 17:55:21 +0000710 */
711xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc,
712 xmlNodePtr root);
713void xmlNodeSetName (xmlNodePtr cur,
714 const xmlChar *name);
715xmlNodePtr xmlAddChild (xmlNodePtr parent,
716 xmlNodePtr cur);
717xmlNodePtr xmlAddChildList (xmlNodePtr parent,
718 xmlNodePtr cur);
719xmlNodePtr xmlReplaceNode (xmlNodePtr old,
720 xmlNodePtr cur);
721xmlNodePtr xmlAddSibling (xmlNodePtr cur,
722 xmlNodePtr elem);
723xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur,
724 xmlNodePtr elem);
725xmlNodePtr xmlAddNextSibling (xmlNodePtr cur,
726 xmlNodePtr elem);
727void xmlUnlinkNode (xmlNodePtr cur);
728xmlNodePtr xmlTextMerge (xmlNodePtr first,
729 xmlNodePtr second);
Daniel Veillarda76fe5c2003-04-24 16:06:47 +0000730int xmlTextConcat (xmlNodePtr node,
Owen Taylor3473f882001-02-23 17:55:21 +0000731 const xmlChar *content,
732 int len);
733void xmlFreeNodeList (xmlNodePtr cur);
734void xmlFreeNode (xmlNodePtr cur);
735void xmlSetTreeDoc (xmlNodePtr tree,
736 xmlDocPtr doc);
737void xmlSetListDoc (xmlNodePtr list,
738 xmlDocPtr doc);
739
740/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000741 * Namespaces.
Owen Taylor3473f882001-02-23 17:55:21 +0000742 */
743xmlNsPtr xmlSearchNs (xmlDocPtr doc,
744 xmlNodePtr node,
745 const xmlChar *nameSpace);
746xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc,
747 xmlNodePtr node,
748 const xmlChar *href);
749xmlNsPtr * xmlGetNsList (xmlDocPtr doc,
750 xmlNodePtr node);
751void xmlSetNs (xmlNodePtr node,
752 xmlNsPtr ns);
753xmlNsPtr xmlCopyNamespace (xmlNsPtr cur);
754xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur);
755
756/*
757 * Changing the content.
758 */
759xmlAttrPtr xmlSetProp (xmlNodePtr node,
760 const xmlChar *name,
761 const xmlChar *value);
762xmlChar * xmlGetProp (xmlNodePtr node,
763 const xmlChar *name);
Daniel Veillard71531f32003-02-05 13:19:53 +0000764xmlChar * xmlGetNoNsProp (xmlNodePtr node,
765 const xmlChar *name);
Owen Taylor3473f882001-02-23 17:55:21 +0000766xmlAttrPtr xmlHasProp (xmlNodePtr node,
767 const xmlChar *name);
Daniel Veillarde95e2392001-06-06 10:46:28 +0000768xmlAttrPtr xmlHasNsProp (xmlNodePtr node,
769 const xmlChar *name,
Daniel Veillardca2366a2001-06-11 12:09:01 +0000770 const xmlChar *nameSpace);
Owen Taylor3473f882001-02-23 17:55:21 +0000771xmlAttrPtr xmlSetNsProp (xmlNodePtr node,
772 xmlNsPtr ns,
773 const xmlChar *name,
774 const xmlChar *value);
775xmlChar * xmlGetNsProp (xmlNodePtr node,
776 const xmlChar *name,
777 const xmlChar *nameSpace);
778xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc,
779 const xmlChar *value);
780xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc,
781 const xmlChar *value,
782 int len);
783xmlChar * xmlNodeListGetString (xmlDocPtr doc,
784 xmlNodePtr list,
785 int inLine);
786xmlChar * xmlNodeListGetRawString (xmlDocPtr doc,
787 xmlNodePtr list,
788 int inLine);
789void xmlNodeSetContent (xmlNodePtr cur,
790 const xmlChar *content);
791void xmlNodeSetContentLen (xmlNodePtr cur,
792 const xmlChar *content,
793 int len);
794void xmlNodeAddContent (xmlNodePtr cur,
795 const xmlChar *content);
796void xmlNodeAddContentLen (xmlNodePtr cur,
797 const xmlChar *content,
798 int len);
799xmlChar * xmlNodeGetContent (xmlNodePtr cur);
800xmlChar * xmlNodeGetLang (xmlNodePtr cur);
801void xmlNodeSetLang (xmlNodePtr cur,
802 const xmlChar *lang);
803int xmlNodeGetSpacePreserve (xmlNodePtr cur);
Daniel Veillardd1640922001-12-17 15:30:10 +0000804void xmlNodeSetSpacePreserve (xmlNodePtr cur,
805 int val);
Owen Taylor3473f882001-02-23 17:55:21 +0000806xmlChar * xmlNodeGetBase (xmlDocPtr doc,
807 xmlNodePtr cur);
808void xmlNodeSetBase (xmlNodePtr cur,
809 xmlChar *uri);
810
811/*
812 * Removing content.
813 */
Daniel Veillardd1640922001-12-17 15:30:10 +0000814int xmlRemoveProp (xmlAttrPtr cur);
Daniel Veillard9403a042001-05-28 11:00:53 +0000815int xmlUnsetProp (xmlNodePtr node,
816 const xmlChar *name);
817int xmlUnsetNsProp (xmlNodePtr node,
818 xmlNsPtr ns,
819 const xmlChar *name);
Owen Taylor3473f882001-02-23 17:55:21 +0000820
821/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000822 * Internal, don't use.
Owen Taylor3473f882001-02-23 17:55:21 +0000823 */
Owen Taylor3473f882001-02-23 17:55:21 +0000824void xmlBufferWriteCHAR (xmlBufferPtr buf,
825 const xmlChar *string);
Owen Taylor3473f882001-02-23 17:55:21 +0000826void xmlBufferWriteChar (xmlBufferPtr buf,
827 const char *string);
828void xmlBufferWriteQuotedString(xmlBufferPtr buf,
829 const xmlChar *string);
830
831/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000832 * Namespace handling.
Owen Taylor3473f882001-02-23 17:55:21 +0000833 */
834int xmlReconciliateNs (xmlDocPtr doc,
835 xmlNodePtr tree);
836
837/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000838 * Saving.
Owen Taylor3473f882001-02-23 17:55:21 +0000839 */
840void xmlDocDumpFormatMemory (xmlDocPtr cur,
Daniel Veillard963d2ae2002-01-20 22:08:18 +0000841 xmlChar **mem,
Owen Taylor3473f882001-02-23 17:55:21 +0000842 int *size,
843 int format);
844void xmlDocDumpMemory (xmlDocPtr cur,
Daniel Veillard963d2ae2002-01-20 22:08:18 +0000845 xmlChar **mem,
Owen Taylor3473f882001-02-23 17:55:21 +0000846 int *size);
847void xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
848 xmlChar **doc_txt_ptr,
849 int * doc_txt_len,
850 const char *txt_encoding);
851void xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
852 xmlChar **doc_txt_ptr,
853 int * doc_txt_len,
854 const char *txt_encoding,
855 int format);
Daniel Veillard9e412302002-06-10 15:59:44 +0000856int xmlDocFormatDump(FILE *f,
857 xmlDocPtr cur,
858 int format);
Owen Taylor3473f882001-02-23 17:55:21 +0000859int xmlDocDump (FILE *f,
860 xmlDocPtr cur);
861void xmlElemDump (FILE *f,
862 xmlDocPtr doc,
863 xmlNodePtr cur);
864int xmlSaveFile (const char *filename,
865 xmlDocPtr cur);
Daniel Veillard67fee942001-04-26 18:59:03 +0000866int xmlSaveFormatFile (const char *filename,
867 xmlDocPtr cur,
868 int format);
Daniel Veillardebc4ca92002-11-27 11:43:05 +0000869int xmlNodeDump (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000870 xmlDocPtr doc,
871 xmlNodePtr cur,
872 int level,
873 int format);
874
CET 2001 Daniel Veillard5a37bde2001-11-01 14:31:22 +0000875int xmlSaveFileTo (xmlOutputBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000876 xmlDocPtr cur,
877 const char *encoding);
CET 2001 Daniel Veillard5a37bde2001-11-01 14:31:22 +0000878int xmlSaveFormatFileTo (xmlOutputBufferPtr buf,
879 xmlDocPtr cur,
880 const char *encoding,
881 int format);
882void xmlNodeDumpOutput (xmlOutputBufferPtr buf,
883 xmlDocPtr doc,
884 xmlNodePtr cur,
885 int level,
886 int format,
887 const char *encoding);
Owen Taylor3473f882001-02-23 17:55:21 +0000888
Daniel Veillardd1640922001-12-17 15:30:10 +0000889int xmlSaveFormatFileEnc (const char *filename,
890 xmlDocPtr cur,
891 const char *encoding,
892 int format);
Daniel Veillardf012a642001-07-23 19:10:52 +0000893
Owen Taylor3473f882001-02-23 17:55:21 +0000894int xmlSaveFileEnc (const char *filename,
895 xmlDocPtr cur,
896 const char *encoding);
897
898/*
Daniel Veillardd5c2f922002-11-21 14:10:52 +0000899 * XHTML
900 */
901int xmlIsXHTML (const xmlChar *systemID,
902 const xmlChar *publicID);
903
904/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000905 * Compression.
Owen Taylor3473f882001-02-23 17:55:21 +0000906 */
907int xmlGetDocCompressMode (xmlDocPtr doc);
908void xmlSetDocCompressMode (xmlDocPtr doc,
909 int mode);
910int xmlGetCompressMode (void);
911void xmlSetCompressMode (int mode);
912
913#ifdef __cplusplus
914}
915#endif
Daniel Veillard6c4ffaf2002-02-11 08:54:05 +0000916#ifndef __XML_PARSER_H__
917#include <libxml/xmlmemory.h>
918#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000919
920#endif /* __XML_TREE_H__ */
921