blob: c8467e8eef4d83d3d72e90f490b03c00112175dc [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);
Owen Taylor3473f882001-02-23 17:55:21 +0000559/*
560 * Handling Buffers.
561 */
562
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000563void xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
564xmlBufferAllocationScheme xmlGetBufferAllocationScheme(void);
565
Owen Taylor3473f882001-02-23 17:55:21 +0000566xmlBufferPtr xmlBufferCreate (void);
567xmlBufferPtr xmlBufferCreateSize (size_t size);
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000568int xmlBufferResize (xmlBufferPtr buf,
569 unsigned int size);
Owen Taylor3473f882001-02-23 17:55:21 +0000570void xmlBufferFree (xmlBufferPtr buf);
571int xmlBufferDump (FILE *file,
572 xmlBufferPtr buf);
573void xmlBufferAdd (xmlBufferPtr buf,
574 const xmlChar *str,
575 int len);
576void xmlBufferAddHead (xmlBufferPtr buf,
577 const xmlChar *str,
578 int len);
579void xmlBufferCat (xmlBufferPtr buf,
580 const xmlChar *str);
581void xmlBufferCCat (xmlBufferPtr buf,
582 const char *str);
583int xmlBufferShrink (xmlBufferPtr buf,
584 unsigned int len);
585int xmlBufferGrow (xmlBufferPtr buf,
586 unsigned int len);
587void xmlBufferEmpty (xmlBufferPtr buf);
588const xmlChar* xmlBufferContent (const xmlBufferPtr buf);
Owen Taylor3473f882001-02-23 17:55:21 +0000589void xmlBufferSetAllocationScheme(xmlBufferPtr buf,
590 xmlBufferAllocationScheme scheme);
591int xmlBufferLength (const xmlBufferPtr buf);
592
593/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000594 * Creating/freeing new structures.
Owen Taylor3473f882001-02-23 17:55:21 +0000595 */
596xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc,
597 const xmlChar *name,
598 const xmlChar *ExternalID,
599 const xmlChar *SystemID);
600xmlDtdPtr xmlNewDtd (xmlDocPtr doc,
601 const xmlChar *name,
602 const xmlChar *ExternalID,
603 const xmlChar *SystemID);
604xmlDtdPtr xmlGetIntSubset (xmlDocPtr doc);
605void xmlFreeDtd (xmlDtdPtr cur);
606xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc,
607 const xmlChar *href,
608 const xmlChar *prefix);
609xmlNsPtr xmlNewNs (xmlNodePtr node,
610 const xmlChar *href,
611 const xmlChar *prefix);
612void xmlFreeNs (xmlNsPtr cur);
Daniel Veillard56a4cb82001-03-24 17:00:36 +0000613void xmlFreeNsList (xmlNsPtr cur);
Owen Taylor3473f882001-02-23 17:55:21 +0000614xmlDocPtr xmlNewDoc (const xmlChar *version);
615void xmlFreeDoc (xmlDocPtr cur);
616xmlAttrPtr xmlNewDocProp (xmlDocPtr doc,
617 const xmlChar *name,
618 const xmlChar *value);
619xmlAttrPtr xmlNewProp (xmlNodePtr node,
620 const xmlChar *name,
621 const xmlChar *value);
622xmlAttrPtr xmlNewNsProp (xmlNodePtr node,
623 xmlNsPtr ns,
624 const xmlChar *name,
625 const xmlChar *value);
Daniel Veillard46de64e2002-05-29 08:21:33 +0000626xmlAttrPtr xmlNewNsPropEatName (xmlNodePtr node,
627 xmlNsPtr ns,
628 xmlChar *name,
629 const xmlChar *value);
Owen Taylor3473f882001-02-23 17:55:21 +0000630void xmlFreePropList (xmlAttrPtr cur);
631void xmlFreeProp (xmlAttrPtr cur);
632xmlAttrPtr xmlCopyProp (xmlNodePtr target,
633 xmlAttrPtr cur);
634xmlAttrPtr xmlCopyPropList (xmlNodePtr target,
635 xmlAttrPtr cur);
636xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd);
637xmlDocPtr xmlCopyDoc (xmlDocPtr doc,
638 int recursive);
639
640/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000641 * Creating new nodes.
Owen Taylor3473f882001-02-23 17:55:21 +0000642 */
643xmlNodePtr xmlNewDocNode (xmlDocPtr doc,
644 xmlNsPtr ns,
645 const xmlChar *name,
646 const xmlChar *content);
Daniel Veillard46de64e2002-05-29 08:21:33 +0000647xmlNodePtr xmlNewDocNodeEatName (xmlDocPtr doc,
648 xmlNsPtr ns,
649 xmlChar *name,
650 const xmlChar *content);
Owen Taylor3473f882001-02-23 17:55:21 +0000651xmlNodePtr xmlNewDocRawNode (xmlDocPtr doc,
652 xmlNsPtr ns,
653 const xmlChar *name,
654 const xmlChar *content);
655xmlNodePtr xmlNewNode (xmlNsPtr ns,
656 const xmlChar *name);
Daniel Veillard46de64e2002-05-29 08:21:33 +0000657xmlNodePtr xmlNewNodeEatName (xmlNsPtr ns,
658 xmlChar *name);
Owen Taylor3473f882001-02-23 17:55:21 +0000659xmlNodePtr xmlNewChild (xmlNodePtr parent,
660 xmlNsPtr ns,
661 const xmlChar *name,
662 const xmlChar *content);
663xmlNodePtr xmlNewTextChild (xmlNodePtr parent,
664 xmlNsPtr ns,
665 const xmlChar *name,
666 const xmlChar *content);
667xmlNodePtr xmlNewDocText (xmlDocPtr doc,
668 const xmlChar *content);
669xmlNodePtr xmlNewText (const xmlChar *content);
670xmlNodePtr xmlNewPI (const xmlChar *name,
671 const xmlChar *content);
672xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc,
673 const xmlChar *content,
674 int len);
675xmlNodePtr xmlNewTextLen (const xmlChar *content,
676 int len);
677xmlNodePtr xmlNewDocComment (xmlDocPtr doc,
678 const xmlChar *content);
679xmlNodePtr xmlNewComment (const xmlChar *content);
680xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc,
681 const xmlChar *content,
682 int len);
683xmlNodePtr xmlNewCharRef (xmlDocPtr doc,
684 const xmlChar *name);
685xmlNodePtr xmlNewReference (xmlDocPtr doc,
686 const xmlChar *name);
Daniel Veillard2ebd7a72001-08-28 21:07:03 +0000687xmlNodePtr xmlCopyNode (const xmlNodePtr node,
Owen Taylor3473f882001-02-23 17:55:21 +0000688 int recursive);
Igor Zlatkovic648b8e92002-04-17 18:35:57 +0000689xmlNodePtr xmlDocCopyNode (const xmlNodePtr node,
Daniel Veillard82daa812001-04-12 08:55:36 +0000690 xmlDocPtr doc,
691 int recursive);
Igor Zlatkovic648b8e92002-04-17 18:35:57 +0000692xmlNodePtr xmlCopyNodeList (const xmlNodePtr node);
Owen Taylor3473f882001-02-23 17:55:21 +0000693xmlNodePtr xmlNewDocFragment (xmlDocPtr doc);
694
695/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000696 * Navigating.
Owen Taylor3473f882001-02-23 17:55:21 +0000697 */
Daniel Veillard8faa7832001-11-26 15:58:08 +0000698long xmlGetLineNo (xmlNodePtr node);
699xmlChar * xmlGetNodePath (xmlNodePtr node);
Owen Taylor3473f882001-02-23 17:55:21 +0000700xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc);
701xmlNodePtr xmlGetLastChild (xmlNodePtr parent);
702int xmlNodeIsText (xmlNodePtr node);
703int xmlIsBlankNode (xmlNodePtr node);
704
705/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000706 * Changing the structure.
Owen Taylor3473f882001-02-23 17:55:21 +0000707 */
708xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc,
709 xmlNodePtr root);
710void xmlNodeSetName (xmlNodePtr cur,
711 const xmlChar *name);
712xmlNodePtr xmlAddChild (xmlNodePtr parent,
713 xmlNodePtr cur);
714xmlNodePtr xmlAddChildList (xmlNodePtr parent,
715 xmlNodePtr cur);
716xmlNodePtr xmlReplaceNode (xmlNodePtr old,
717 xmlNodePtr cur);
718xmlNodePtr xmlAddSibling (xmlNodePtr cur,
719 xmlNodePtr elem);
720xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur,
721 xmlNodePtr elem);
722xmlNodePtr xmlAddNextSibling (xmlNodePtr cur,
723 xmlNodePtr elem);
724void xmlUnlinkNode (xmlNodePtr cur);
725xmlNodePtr xmlTextMerge (xmlNodePtr first,
726 xmlNodePtr second);
Daniel Veillarda76fe5c2003-04-24 16:06:47 +0000727int xmlTextConcat (xmlNodePtr node,
Owen Taylor3473f882001-02-23 17:55:21 +0000728 const xmlChar *content,
729 int len);
730void xmlFreeNodeList (xmlNodePtr cur);
731void xmlFreeNode (xmlNodePtr cur);
732void xmlSetTreeDoc (xmlNodePtr tree,
733 xmlDocPtr doc);
734void xmlSetListDoc (xmlNodePtr list,
735 xmlDocPtr doc);
736
737/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000738 * Namespaces.
Owen Taylor3473f882001-02-23 17:55:21 +0000739 */
740xmlNsPtr xmlSearchNs (xmlDocPtr doc,
741 xmlNodePtr node,
742 const xmlChar *nameSpace);
743xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc,
744 xmlNodePtr node,
745 const xmlChar *href);
746xmlNsPtr * xmlGetNsList (xmlDocPtr doc,
747 xmlNodePtr node);
748void xmlSetNs (xmlNodePtr node,
749 xmlNsPtr ns);
750xmlNsPtr xmlCopyNamespace (xmlNsPtr cur);
751xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur);
752
753/*
754 * Changing the content.
755 */
756xmlAttrPtr xmlSetProp (xmlNodePtr node,
757 const xmlChar *name,
758 const xmlChar *value);
759xmlChar * xmlGetProp (xmlNodePtr node,
760 const xmlChar *name);
Daniel Veillard71531f32003-02-05 13:19:53 +0000761xmlChar * xmlGetNoNsProp (xmlNodePtr node,
762 const xmlChar *name);
Owen Taylor3473f882001-02-23 17:55:21 +0000763xmlAttrPtr xmlHasProp (xmlNodePtr node,
764 const xmlChar *name);
Daniel Veillarde95e2392001-06-06 10:46:28 +0000765xmlAttrPtr xmlHasNsProp (xmlNodePtr node,
766 const xmlChar *name,
Daniel Veillardca2366a2001-06-11 12:09:01 +0000767 const xmlChar *nameSpace);
Owen Taylor3473f882001-02-23 17:55:21 +0000768xmlAttrPtr xmlSetNsProp (xmlNodePtr node,
769 xmlNsPtr ns,
770 const xmlChar *name,
771 const xmlChar *value);
772xmlChar * xmlGetNsProp (xmlNodePtr node,
773 const xmlChar *name,
774 const xmlChar *nameSpace);
775xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc,
776 const xmlChar *value);
777xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc,
778 const xmlChar *value,
779 int len);
780xmlChar * xmlNodeListGetString (xmlDocPtr doc,
781 xmlNodePtr list,
782 int inLine);
783xmlChar * xmlNodeListGetRawString (xmlDocPtr doc,
784 xmlNodePtr list,
785 int inLine);
786void xmlNodeSetContent (xmlNodePtr cur,
787 const xmlChar *content);
788void xmlNodeSetContentLen (xmlNodePtr cur,
789 const xmlChar *content,
790 int len);
791void xmlNodeAddContent (xmlNodePtr cur,
792 const xmlChar *content);
793void xmlNodeAddContentLen (xmlNodePtr cur,
794 const xmlChar *content,
795 int len);
796xmlChar * xmlNodeGetContent (xmlNodePtr cur);
797xmlChar * xmlNodeGetLang (xmlNodePtr cur);
798void xmlNodeSetLang (xmlNodePtr cur,
799 const xmlChar *lang);
800int xmlNodeGetSpacePreserve (xmlNodePtr cur);
Daniel Veillardd1640922001-12-17 15:30:10 +0000801void xmlNodeSetSpacePreserve (xmlNodePtr cur,
802 int val);
Owen Taylor3473f882001-02-23 17:55:21 +0000803xmlChar * xmlNodeGetBase (xmlDocPtr doc,
804 xmlNodePtr cur);
805void xmlNodeSetBase (xmlNodePtr cur,
806 xmlChar *uri);
807
808/*
809 * Removing content.
810 */
Daniel Veillardd1640922001-12-17 15:30:10 +0000811int xmlRemoveProp (xmlAttrPtr cur);
Daniel Veillard9403a042001-05-28 11:00:53 +0000812int xmlUnsetProp (xmlNodePtr node,
813 const xmlChar *name);
814int xmlUnsetNsProp (xmlNodePtr node,
815 xmlNsPtr ns,
816 const xmlChar *name);
Owen Taylor3473f882001-02-23 17:55:21 +0000817
818/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000819 * Internal, don't use.
Owen Taylor3473f882001-02-23 17:55:21 +0000820 */
Owen Taylor3473f882001-02-23 17:55:21 +0000821void xmlBufferWriteCHAR (xmlBufferPtr buf,
822 const xmlChar *string);
Owen Taylor3473f882001-02-23 17:55:21 +0000823void xmlBufferWriteChar (xmlBufferPtr buf,
824 const char *string);
825void xmlBufferWriteQuotedString(xmlBufferPtr buf,
826 const xmlChar *string);
827
828/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000829 * Namespace handling.
Owen Taylor3473f882001-02-23 17:55:21 +0000830 */
831int xmlReconciliateNs (xmlDocPtr doc,
832 xmlNodePtr tree);
833
834/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000835 * Saving.
Owen Taylor3473f882001-02-23 17:55:21 +0000836 */
837void xmlDocDumpFormatMemory (xmlDocPtr cur,
Daniel Veillard963d2ae2002-01-20 22:08:18 +0000838 xmlChar **mem,
Owen Taylor3473f882001-02-23 17:55:21 +0000839 int *size,
840 int format);
841void xmlDocDumpMemory (xmlDocPtr cur,
Daniel Veillard963d2ae2002-01-20 22:08:18 +0000842 xmlChar **mem,
Owen Taylor3473f882001-02-23 17:55:21 +0000843 int *size);
844void xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
845 xmlChar **doc_txt_ptr,
846 int * doc_txt_len,
847 const char *txt_encoding);
848void xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
849 xmlChar **doc_txt_ptr,
850 int * doc_txt_len,
851 const char *txt_encoding,
852 int format);
Daniel Veillard9e412302002-06-10 15:59:44 +0000853int xmlDocFormatDump(FILE *f,
854 xmlDocPtr cur,
855 int format);
Owen Taylor3473f882001-02-23 17:55:21 +0000856int xmlDocDump (FILE *f,
857 xmlDocPtr cur);
858void xmlElemDump (FILE *f,
859 xmlDocPtr doc,
860 xmlNodePtr cur);
861int xmlSaveFile (const char *filename,
862 xmlDocPtr cur);
Daniel Veillard67fee942001-04-26 18:59:03 +0000863int xmlSaveFormatFile (const char *filename,
864 xmlDocPtr cur,
865 int format);
Daniel Veillardebc4ca92002-11-27 11:43:05 +0000866int xmlNodeDump (xmlBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000867 xmlDocPtr doc,
868 xmlNodePtr cur,
869 int level,
870 int format);
871
CET 2001 Daniel Veillard5a37bde2001-11-01 14:31:22 +0000872int xmlSaveFileTo (xmlOutputBufferPtr buf,
Owen Taylor3473f882001-02-23 17:55:21 +0000873 xmlDocPtr cur,
874 const char *encoding);
CET 2001 Daniel Veillard5a37bde2001-11-01 14:31:22 +0000875int xmlSaveFormatFileTo (xmlOutputBufferPtr buf,
876 xmlDocPtr cur,
877 const char *encoding,
878 int format);
879void xmlNodeDumpOutput (xmlOutputBufferPtr buf,
880 xmlDocPtr doc,
881 xmlNodePtr cur,
882 int level,
883 int format,
884 const char *encoding);
Owen Taylor3473f882001-02-23 17:55:21 +0000885
Daniel Veillardd1640922001-12-17 15:30:10 +0000886int xmlSaveFormatFileEnc (const char *filename,
887 xmlDocPtr cur,
888 const char *encoding,
889 int format);
Daniel Veillardf012a642001-07-23 19:10:52 +0000890
Owen Taylor3473f882001-02-23 17:55:21 +0000891int xmlSaveFileEnc (const char *filename,
892 xmlDocPtr cur,
893 const char *encoding);
894
895/*
Daniel Veillardd5c2f922002-11-21 14:10:52 +0000896 * XHTML
897 */
898int xmlIsXHTML (const xmlChar *systemID,
899 const xmlChar *publicID);
900
901/*
Daniel Veillard61f26172002-03-12 18:46:39 +0000902 * Compression.
Owen Taylor3473f882001-02-23 17:55:21 +0000903 */
904int xmlGetDocCompressMode (xmlDocPtr doc);
905void xmlSetDocCompressMode (xmlDocPtr doc,
906 int mode);
907int xmlGetCompressMode (void);
908void xmlSetCompressMode (int mode);
909
910#ifdef __cplusplus
911}
912#endif
Daniel Veillard6c4ffaf2002-02-11 08:54:05 +0000913#ifndef __XML_PARSER_H__
914#include <libxml/xmlmemory.h>
915#endif
Owen Taylor3473f882001-02-23 17:55:21 +0000916
917#endif /* __XML_TREE_H__ */
918