blob: 648817d0473c0b20cbe2c6f79ff0bf1e8ca09c36 [file] [log] [blame]
Daniel Veillard260a68f1998-08-13 03:39:55 +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 Veillard39a1f9a1999-01-17 19:11:59 +00007 * Daniel.Veillard@w3.org
Daniel Veillardce6e98d2000-11-25 09:54:49 +00008 *
9 * 14 Nov 2000 ht - added redefinition of xmlBufferWriteChar for VMS
10 *
Daniel Veillard260a68f1998-08-13 03:39:55 +000011 */
12
13#ifndef __XML_TREE_H__
14#define __XML_TREE_H__
15
Daniel Veillard82c305b1999-12-15 19:08:23 +000016#include <stdio.h>
Daniel Veillard361d8452000-04-03 19:48:13 +000017#include <libxml/xmlversion.h>
Daniel Veillard82c305b1999-12-15 19:08:23 +000018
Daniel Veillard260a68f1998-08-13 03:39:55 +000019#ifdef __cplusplus
20extern "C" {
21#endif
22
Daniel Veillarde0e26512001-02-16 00:11:46 +000023#define XML_XML_NAMESPACE \
24 (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
25
Daniel Veillard260a68f1998-08-13 03:39:55 +000026/*
Daniel Veillardccb09631998-10-27 06:21:04 +000027 * The different element types carried by an XML tree
28 *
29 * NOTE: This is synchronized with DOM Level1 values
30 * See http://www.w3.org/TR/REC-DOM-Level-1/
Daniel Veillard4a6845d2001-01-03 13:32:39 +000031 *
32 * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
33 * be deprecated to use an XML_DTD_NODE.
Daniel Veillardccb09631998-10-27 06:21:04 +000034 */
35typedef enum {
36 XML_ELEMENT_NODE= 1,
37 XML_ATTRIBUTE_NODE= 2,
38 XML_TEXT_NODE= 3,
39 XML_CDATA_SECTION_NODE= 4,
40 XML_ENTITY_REF_NODE= 5,
41 XML_ENTITY_NODE= 6,
42 XML_PI_NODE= 7,
43 XML_COMMENT_NODE= 8,
44 XML_DOCUMENT_NODE= 9,
45 XML_DOCUMENT_TYPE_NODE= 10,
46 XML_DOCUMENT_FRAG_NODE= 11,
Daniel Veillard7c1206f1999-10-14 09:10:25 +000047 XML_NOTATION_NODE= 12,
Daniel Veillardcf461992000-03-14 18:30:20 +000048 XML_HTML_DOCUMENT_NODE= 13,
49 XML_DTD_NODE= 14,
50 XML_ELEMENT_DECL= 15,
51 XML_ATTRIBUTE_DECL= 16,
Daniel Veillard39c7d712000-09-10 16:14:55 +000052 XML_ENTITY_DECL= 17,
Daniel Veillard9e8bfae2000-11-06 16:43:11 +000053 XML_NAMESPACE_DECL= 18,
54 XML_XINCLUDE_START= 19,
55 XML_XINCLUDE_END= 20
Daniel Veillarda4964b72000-10-31 18:23:44 +000056#ifdef LIBXML_SGML_ENABLED
Daniel Veillard9e8bfae2000-11-06 16:43:11 +000057 ,XML_SGML_DOCUMENT_NODE= 21
Daniel Veillard39c7d712000-09-10 16:14:55 +000058#endif
Daniel Veillardccb09631998-10-27 06:21:04 +000059} xmlElementType;
60
61/*
Daniel Veillard0ba4d531998-11-01 19:34:31 +000062 * Size of an internal character representation.
63 *
Daniel Veillardcf461992000-03-14 18:30:20 +000064 * We use 8bit chars internal representation for memory efficiency,
65 * Note that with 8 bits wide xmlChars one can still use UTF-8 to handle
66 * correctly non ISO-Latin input.
Daniel Veillard260a68f1998-08-13 03:39:55 +000067 */
Daniel Veillarddd6b3671999-09-23 22:19:22 +000068
Daniel Veillarddd6b3671999-09-23 22:19:22 +000069typedef unsigned char xmlChar;
Daniel Veillard260a68f1998-08-13 03:39:55 +000070
Daniel Veillarddd6b3671999-09-23 22:19:22 +000071#ifndef WIN32
72#ifndef CHAR
73#define CHAR xmlChar
74#endif
75#endif
76
77#define BAD_CAST (xmlChar *)
Daniel Veillardb96e6431999-08-29 21:02:19 +000078
Daniel Veillard260a68f1998-08-13 03:39:55 +000079/*
80 * a DTD Notation definition
Daniel Veillard260a68f1998-08-13 03:39:55 +000081 */
82
Daniel Veillard71b656e2000-01-05 14:46:17 +000083typedef struct _xmlNotation xmlNotation;
84typedef xmlNotation *xmlNotationPtr;
85struct _xmlNotation {
Daniel Veillarddd6b3671999-09-23 22:19:22 +000086 const xmlChar *name; /* Notation name */
87 const xmlChar *PublicID; /* Public identifier, if any */
88 const xmlChar *SystemID; /* System identifier, if any */
Daniel Veillard71b656e2000-01-05 14:46:17 +000089};
Daniel Veillard1e346af1999-02-22 10:33:01 +000090
Daniel Veillard260a68f1998-08-13 03:39:55 +000091/*
92 * a DTD Attribute definition
Daniel Veillard260a68f1998-08-13 03:39:55 +000093 */
94
Daniel Veillard1e346af1999-02-22 10:33:01 +000095typedef enum {
96 XML_ATTRIBUTE_CDATA = 1,
97 XML_ATTRIBUTE_ID,
98 XML_ATTRIBUTE_IDREF ,
99 XML_ATTRIBUTE_IDREFS,
100 XML_ATTRIBUTE_ENTITY,
101 XML_ATTRIBUTE_ENTITIES,
102 XML_ATTRIBUTE_NMTOKEN,
103 XML_ATTRIBUTE_NMTOKENS,
104 XML_ATTRIBUTE_ENUMERATION,
105 XML_ATTRIBUTE_NOTATION
106} xmlAttributeType;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000107
Daniel Veillard1e346af1999-02-22 10:33:01 +0000108typedef enum {
109 XML_ATTRIBUTE_NONE = 1,
110 XML_ATTRIBUTE_REQUIRED,
111 XML_ATTRIBUTE_IMPLIED,
112 XML_ATTRIBUTE_FIXED
113} xmlAttributeDefault;
114
Daniel Veillard71b656e2000-01-05 14:46:17 +0000115typedef struct _xmlEnumeration xmlEnumeration;
Daniel Veillard1e346af1999-02-22 10:33:01 +0000116typedef xmlEnumeration *xmlEnumerationPtr;
Daniel Veillard71b656e2000-01-05 14:46:17 +0000117struct _xmlEnumeration {
118 struct _xmlEnumeration *next; /* next one */
119 const xmlChar *name; /* Enumeration name */
120};
Daniel Veillard1e346af1999-02-22 10:33:01 +0000121
Daniel Veillard71b656e2000-01-05 14:46:17 +0000122typedef struct _xmlAttribute xmlAttribute;
123typedef xmlAttribute *xmlAttributePtr;
124struct _xmlAttribute {
Daniel Veillardcf461992000-03-14 18:30:20 +0000125#ifndef XML_WITHOUT_CORBA
126 void *_private; /* for Corba, must be first ! */
127#endif
128 xmlElementType type; /* XML_ATTRIBUTE_DECL, must be second ! */
129 const xmlChar *name; /* Attribute name */
130 struct _xmlNode *children; /* NULL */
131 struct _xmlNode *last; /* NULL */
132 struct _xmlDtd *parent; /* -> DTD */
133 struct _xmlNode *next; /* next sibling link */
134 struct _xmlNode *prev; /* previous sibling link */
135 struct _xmlDoc *doc; /* the containing document */
136
137 struct _xmlAttribute *nexth; /* next in hash table */
138 xmlAttributeType atype; /* The attribute type */
139 xmlAttributeDefault def; /* the default */
140 const xmlChar *defaultValue; /* or the default value */
141 xmlEnumerationPtr tree; /* or the enumeration tree if any */
142 const xmlChar *prefix; /* the namespace prefix if any */
143 const xmlChar *elem; /* Element holding the attribute */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000144};
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000145
Daniel Veillard260a68f1998-08-13 03:39:55 +0000146/*
147 * a DTD Element definition.
148 */
Daniel Veillard1899e851999-02-01 12:18:54 +0000149typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000150 XML_ELEMENT_CONTENT_PCDATA = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000151 XML_ELEMENT_CONTENT_ELEMENT,
152 XML_ELEMENT_CONTENT_SEQ,
153 XML_ELEMENT_CONTENT_OR
154} xmlElementContentType;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000155
Daniel Veillard1899e851999-02-01 12:18:54 +0000156typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000157 XML_ELEMENT_CONTENT_ONCE = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000158 XML_ELEMENT_CONTENT_OPT,
159 XML_ELEMENT_CONTENT_MULT,
160 XML_ELEMENT_CONTENT_PLUS
161} xmlElementContentOccur;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000162
Daniel Veillard71b656e2000-01-05 14:46:17 +0000163typedef struct _xmlElementContent xmlElementContent;
164typedef xmlElementContent *xmlElementContentPtr;
165struct _xmlElementContent {
Daniel Veillard1899e851999-02-01 12:18:54 +0000166 xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
167 xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
Daniel Veillard6077d031999-10-09 09:11:45 +0000168 const xmlChar *name; /* Element name */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000169 struct _xmlElementContent *c1; /* first child */
170 struct _xmlElementContent *c2; /* second child */
171};
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000172
Daniel Veillard1899e851999-02-01 12:18:54 +0000173typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000174 XML_ELEMENT_TYPE_EMPTY = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000175 XML_ELEMENT_TYPE_ANY,
176 XML_ELEMENT_TYPE_MIXED,
177 XML_ELEMENT_TYPE_ELEMENT
178} xmlElementTypeVal;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000179
Daniel Veillard71b656e2000-01-05 14:46:17 +0000180typedef struct _xmlElement xmlElement;
181typedef xmlElement *xmlElementPtr;
182struct _xmlElement {
Daniel Veillardcf461992000-03-14 18:30:20 +0000183#ifndef XML_WITHOUT_CORBA
184 void *_private; /* for Corba, must be first ! */
185#endif
186 xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */
Daniel Veillard6077d031999-10-09 09:11:45 +0000187 const xmlChar *name; /* Element name */
Daniel Veillardcf461992000-03-14 18:30:20 +0000188 struct _xmlNode *children; /* NULL */
189 struct _xmlNode *last; /* NULL */
190 struct _xmlDtd *parent; /* -> DTD */
191 struct _xmlNode *next; /* next sibling link */
192 struct _xmlNode *prev; /* previous sibling link */
193 struct _xmlDoc *doc; /* the containing document */
194
195 xmlElementTypeVal etype; /* The type */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000196 xmlElementContentPtr content; /* the allowed element content */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000197 xmlAttributePtr attributes; /* List of the declared attributes */
Daniel Veillardbe803962000-06-28 23:40:59 +0000198 const xmlChar *prefix; /* the namespace prefix if any */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000199};
Daniel Veillard260a68f1998-08-13 03:39:55 +0000200
201/*
202 * An XML namespace.
203 * Note that prefix == NULL is valid, it defines the default namespace
204 * within the subtree (until overriden).
Daniel Veillarda4964b72000-10-31 18:23:44 +0000205 *
206 * XML_GLOBAL_NAMESPACE is now deprecated for good
207 * xmlNsType is unified with xmlElementType
Daniel Veillard260a68f1998-08-13 03:39:55 +0000208 */
209
Daniel Veillarda4964b72000-10-31 18:23:44 +0000210#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
211typedef xmlElementType xmlNsType;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000212
Daniel Veillard71b656e2000-01-05 14:46:17 +0000213typedef struct _xmlNs xmlNs;
214typedef xmlNs *xmlNsPtr;
215struct _xmlNs {
216 struct _xmlNs *next; /* next Ns link for this node */
Daniel Veillard1899e851999-02-01 12:18:54 +0000217 xmlNsType type; /* global or local */
Daniel Veillard6077d031999-10-09 09:11:45 +0000218 const xmlChar *href; /* URL for the namespace */
219 const xmlChar *prefix; /* prefix for the namespace */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000220};
Daniel Veillard260a68f1998-08-13 03:39:55 +0000221
222/*
223 * An XML DtD, as defined by <!DOCTYPE.
224 */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000225typedef struct _xmlDtd xmlDtd;
226typedef xmlDtd *xmlDtdPtr;
227struct _xmlDtd {
Daniel Veillardcf461992000-03-14 18:30:20 +0000228#ifndef XML_WITHOUT_CORBA
229 void *_private; /* for Corba, must be first ! */
230#endif
231 xmlElementType type; /* XML_DTD_NODE, must be second ! */
Daniel Veillard6077d031999-10-09 09:11:45 +0000232 const xmlChar *name; /* Name of the DTD */
Daniel Veillardcf461992000-03-14 18:30:20 +0000233 struct _xmlNode *children; /* the value of the property link */
234 struct _xmlNode *last; /* last child link */
235 struct _xmlDoc *parent; /* child->parent link */
236 struct _xmlNode *next; /* next sibling link */
237 struct _xmlNode *prev; /* previous sibling link */
238 struct _xmlDoc *doc; /* the containing document */
239
240 /* End of common part */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000241 void *notations; /* Hash table for notations if any */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000242 void *elements; /* Hash table for elements if any */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000243 void *attributes; /* Hash table for attributes if any */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000244 void *entities; /* Hash table for entities if any */
Daniel Veillardcf461992000-03-14 18:30:20 +0000245 const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */
246 const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
Daniel Veillard52afe802000-10-22 16:56:02 +0000247 void *pentities; /* Hash table for param entities if any */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000248};
Daniel Veillard260a68f1998-08-13 03:39:55 +0000249
250/*
251 * A attribute of an XML node.
252 */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000253typedef struct _xmlAttr xmlAttr;
254typedef xmlAttr *xmlAttrPtr;
255struct _xmlAttr {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000256#ifndef XML_WITHOUT_CORBA
257 void *_private; /* for Corba, must be first ! */
Daniel Veillard27fb0751998-10-17 06:47:46 +0000258#endif
Daniel Veillardcf461992000-03-14 18:30:20 +0000259 xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000260 const xmlChar *name; /* the name of the property */
Daniel Veillardcf461992000-03-14 18:30:20 +0000261 struct _xmlNode *children; /* the value of the property */
262 struct _xmlNode *last; /* NULL */
263 struct _xmlNode *parent; /* child->parent link */
264 struct _xmlAttr *next; /* next sibling link */
265 struct _xmlAttr *prev; /* previous sibling link */
266 struct _xmlDoc *doc; /* the containing document */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000267 xmlNs *ns; /* pointer to the associated namespace */
Daniel Veillardcf461992000-03-14 18:30:20 +0000268 xmlAttributeType atype; /* the attribute type if validating */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000269};
Daniel Veillard260a68f1998-08-13 03:39:55 +0000270
271/*
Daniel Veillard991e63d1999-08-15 23:32:28 +0000272 * An XML ID instance.
273 */
274
Daniel Veillard71b656e2000-01-05 14:46:17 +0000275typedef struct _xmlID xmlID;
276typedef xmlID *xmlIDPtr;
277struct _xmlID {
278 struct _xmlID *next; /* next ID */
Daniel Veillard6077d031999-10-09 09:11:45 +0000279 const xmlChar *value; /* The ID name */
Daniel Veillard991e63d1999-08-15 23:32:28 +0000280 xmlAttrPtr attr; /* The attribut holding it */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000281};
Daniel Veillard991e63d1999-08-15 23:32:28 +0000282
283/*
Daniel Veillardc08a2c61999-09-08 21:35:25 +0000284 * An XML IDREF instance.
285 */
286
Daniel Veillard71b656e2000-01-05 14:46:17 +0000287typedef struct _xmlRef xmlRef;
288typedef xmlRef *xmlRefPtr;
289struct _xmlRef {
290 struct _xmlRef *next; /* next Ref */
Daniel Veillard6077d031999-10-09 09:11:45 +0000291 const xmlChar *value; /* The Ref name */
Daniel Veillardc08a2c61999-09-08 21:35:25 +0000292 xmlAttrPtr attr; /* The attribut holding it */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000293};
Daniel Veillardc08a2c61999-09-08 21:35:25 +0000294
295/*
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000296 * A buffer structure
297 */
298
299typedef enum {
300 XML_BUFFER_ALLOC_DOUBLEIT,
301 XML_BUFFER_ALLOC_EXACT
302} xmlBufferAllocationScheme;
303
Daniel Veillard71b656e2000-01-05 14:46:17 +0000304typedef struct _xmlBuffer xmlBuffer;
305typedef xmlBuffer *xmlBufferPtr;
306struct _xmlBuffer {
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000307 xmlChar *content; /* The buffer content UTF8 */
308 unsigned int use; /* The buffer size used */
309 unsigned int size; /* The buffer size */
310 xmlBufferAllocationScheme alloc; /* The realloc method */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000311};
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000312
313/*
Daniel Veillard260a68f1998-08-13 03:39:55 +0000314 * A node in an XML tree.
315 */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000316typedef struct _xmlNode xmlNode;
317typedef xmlNode *xmlNodePtr;
318struct _xmlNode {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000319#ifndef XML_WITHOUT_CORBA
320 void *_private; /* for Corba, must be first ! */
Daniel Veillard27fb0751998-10-17 06:47:46 +0000321#endif
Daniel Veillardcf461992000-03-14 18:30:20 +0000322 xmlElementType type; /* type number, must be second ! */
323 const xmlChar *name; /* the name of the node, or the entity */
324 struct _xmlNode *children; /* parent->childs link */
325 struct _xmlNode *last; /* last child link */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000326 struct _xmlNode *parent; /* child->parent link */
327 struct _xmlNode *next; /* next sibling link */
328 struct _xmlNode *prev; /* previous sibling link */
Daniel Veillardcf461992000-03-14 18:30:20 +0000329 struct _xmlDoc *doc; /* the containing document */
330 xmlNs *ns; /* pointer to the associated namespace */
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000331#ifndef XML_USE_BUFFER_CONTENT
Daniel Veillardcf461992000-03-14 18:30:20 +0000332 xmlChar *content; /* the content */
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000333#else
Daniel Veillardcf461992000-03-14 18:30:20 +0000334 xmlBufferPtr content; /* the content in a buffer */
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000335#endif
Daniel Veillardcf461992000-03-14 18:30:20 +0000336
337 /* End of common part */
338 struct _xmlAttr *properties;/* properties list */
339 xmlNs *nsDef; /* namespace definitions on this node */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000340};
Daniel Veillard260a68f1998-08-13 03:39:55 +0000341
342/*
343 * An XML document.
344 */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000345typedef struct _xmlDoc xmlDoc;
346typedef xmlDoc *xmlDocPtr;
347struct _xmlDoc {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000348#ifndef XML_WITHOUT_CORBA
349 void *_private; /* for Corba, must be first ! */
Daniel Veillard27fb0751998-10-17 06:47:46 +0000350#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000351 xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000352 char *name; /* name/filename/URI of the document */
Daniel Veillardcf461992000-03-14 18:30:20 +0000353 struct _xmlNode *children; /* the document tree */
354 struct _xmlNode *last; /* last child link */
355 struct _xmlNode *parent; /* child->parent link */
356 struct _xmlNode *next; /* next sibling link */
357 struct _xmlNode *prev; /* previous sibling link */
358 struct _xmlDoc *doc; /* autoreference to itself */
359
360 /* End of common part */
Daniel Veillard15a8df41998-09-24 19:15:06 +0000361 int compression;/* level of zlib compression */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000362 int standalone; /* standalone document (no external refs) */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000363 struct _xmlDtd *intSubset; /* the document internal subset */
364 struct _xmlDtd *extSubset; /* the document external subset */
365 struct _xmlNs *oldNs; /* Global namespace, the old way */
Daniel Veillardcf461992000-03-14 18:30:20 +0000366 const xmlChar *version; /* the XML version string */
Daniel Veillardbe803962000-06-28 23:40:59 +0000367 const xmlChar *encoding; /* external initial encoding, if any */
Daniel Veillard991e63d1999-08-15 23:32:28 +0000368 void *ids; /* Hash table for ID attributes if any */
Daniel Veillardc08a2c61999-09-08 21:35:25 +0000369 void *refs; /* Hash table for IDREFs attributes if any */
Daniel Veillardcf461992000-03-14 18:30:20 +0000370 const xmlChar *URL; /* The URI for that document */
Daniel Veillardbe803962000-06-28 23:40:59 +0000371 int charset; /* encoding of the in-memory content
372 actually an xmlCharEncoding */
Daniel Veillard71b656e2000-01-05 14:46:17 +0000373};
Daniel Veillard260a68f1998-08-13 03:39:55 +0000374
375/*
Daniel Veillardbe803962000-06-28 23:40:59 +0000376 * Compatibility naming layer with libxml1
377 */
378#ifndef xmlChildrenNode
379#define xmlChildrenNode children
380#define xmlRootNode children
381#endif
382
383/*
Daniel Veillard260a68f1998-08-13 03:39:55 +0000384 * Variables.
385 */
Daniel Veillardc2def842000-11-07 14:21:01 +0000386LIBXML_DLL_IMPORT extern xmlNsPtr baseDTD;
387LIBXML_DLL_IMPORT extern int oldXMLWDcompatibility;/* maintain compatibility with old WD */
388LIBXML_DLL_IMPORT extern int xmlIndentTreeOutput; /* try to indent the tree dumps */
389LIBXML_DLL_IMPORT extern xmlBufferAllocationScheme xmlBufferAllocScheme; /* alloc scheme to use */
390LIBXML_DLL_IMPORT extern int xmlSaveNoEmptyTags; /* save empty tags as <empty></empty> */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000391
392/*
Daniel Veillard5099ae81999-04-21 20:12:07 +0000393 * Handling Buffers.
394 */
395
Daniel Veillardb96e6431999-08-29 21:02:19 +0000396xmlBufferPtr xmlBufferCreate (void);
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000397xmlBufferPtr xmlBufferCreateSize (size_t size);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000398void xmlBufferFree (xmlBufferPtr buf);
399int xmlBufferDump (FILE *file,
400 xmlBufferPtr buf);
401void xmlBufferAdd (xmlBufferPtr buf,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000402 const xmlChar *str,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000403 int len);
Daniel Veillardbe803962000-06-28 23:40:59 +0000404void xmlBufferAddHead (xmlBufferPtr buf,
405 const xmlChar *str,
406 int len);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000407void xmlBufferCat (xmlBufferPtr buf,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000408 const xmlChar *str);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000409void xmlBufferCCat (xmlBufferPtr buf,
410 const char *str);
411int xmlBufferShrink (xmlBufferPtr buf,
Daniel Veillard4b0755c2000-09-25 14:26:28 +0000412 unsigned int len);
Daniel Veillard496a1cf2000-05-03 14:20:55 +0000413int xmlBufferGrow (xmlBufferPtr buf,
Daniel Veillard4b0755c2000-09-25 14:26:28 +0000414 unsigned int len);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000415void xmlBufferEmpty (xmlBufferPtr buf);
Daniel Veillardf5c2c871999-12-01 09:51:45 +0000416const xmlChar* xmlBufferContent (const xmlBufferPtr buf);
417int xmlBufferUse (const xmlBufferPtr buf);
418void xmlBufferSetAllocationScheme(xmlBufferPtr buf,
419 xmlBufferAllocationScheme scheme);
420int xmlBufferLength (const xmlBufferPtr buf);
Daniel Veillard5099ae81999-04-21 20:12:07 +0000421
422/*
Daniel Veillard16253641998-10-28 22:58:05 +0000423 * Creating/freeing new structures
Daniel Veillard260a68f1998-08-13 03:39:55 +0000424 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000425xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000426 const xmlChar *name,
427 const xmlChar *ExternalID,
428 const xmlChar *SystemID);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000429xmlDtdPtr xmlNewDtd (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000430 const xmlChar *name,
431 const xmlChar *ExternalID,
432 const xmlChar *SystemID);
Daniel Veillardd83eb822000-06-30 18:39:56 +0000433xmlDtdPtr xmlGetIntSubset (xmlDocPtr doc);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000434void xmlFreeDtd (xmlDtdPtr cur);
435xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000436 const xmlChar *href,
437 const xmlChar *prefix);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000438xmlNsPtr xmlNewNs (xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000439 const xmlChar *href,
440 const xmlChar *prefix);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000441void xmlFreeNs (xmlNsPtr cur);
Daniel Veillard6077d031999-10-09 09:11:45 +0000442xmlDocPtr xmlNewDoc (const xmlChar *version);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000443void xmlFreeDoc (xmlDocPtr cur);
444xmlAttrPtr xmlNewDocProp (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000445 const xmlChar *name,
446 const xmlChar *value);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000447xmlAttrPtr xmlNewProp (xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000448 const xmlChar *name,
449 const xmlChar *value);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000450xmlAttrPtr xmlNewNsProp (xmlNodePtr node,
451 xmlNsPtr ns,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000452 const xmlChar *name,
453 const xmlChar *value);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000454void xmlFreePropList (xmlAttrPtr cur);
455void xmlFreeProp (xmlAttrPtr cur);
456xmlAttrPtr xmlCopyProp (xmlNodePtr target,
457 xmlAttrPtr cur);
458xmlAttrPtr xmlCopyPropList (xmlNodePtr target,
459 xmlAttrPtr cur);
460xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd);
461xmlDocPtr xmlCopyDoc (xmlDocPtr doc,
462 int recursive);
Daniel Veillard16253641998-10-28 22:58:05 +0000463
464/*
465 * Creating new nodes
466 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000467xmlNodePtr xmlNewDocNode (xmlDocPtr doc,
468 xmlNsPtr ns,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000469 const xmlChar *name,
470 const xmlChar *content);
Daniel Veillard11a48ec1999-11-23 10:40:46 +0000471xmlNodePtr xmlNewDocRawNode (xmlDocPtr doc,
472 xmlNsPtr ns,
473 const xmlChar *name,
474 const xmlChar *content);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000475xmlNodePtr xmlNewNode (xmlNsPtr ns,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000476 const xmlChar *name);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000477xmlNodePtr xmlNewChild (xmlNodePtr parent,
478 xmlNsPtr ns,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000479 const xmlChar *name,
480 const xmlChar *content);
Daniel Veillard11a48ec1999-11-23 10:40:46 +0000481xmlNodePtr xmlNewTextChild (xmlNodePtr parent,
482 xmlNsPtr ns,
483 const xmlChar *name,
484 const xmlChar *content);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000485xmlNodePtr xmlNewDocText (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000486 const xmlChar *content);
487xmlNodePtr xmlNewText (const xmlChar *content);
488xmlNodePtr xmlNewPI (const xmlChar *name,
489 const xmlChar *content);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000490xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000491 const xmlChar *content,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000492 int len);
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000493xmlNodePtr xmlNewTextLen (const xmlChar *content,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000494 int len);
495xmlNodePtr xmlNewDocComment (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000496 const xmlChar *content);
497xmlNodePtr xmlNewComment (const xmlChar *content);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000498xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000499 const xmlChar *content,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000500 int len);
Daniel Veillardcf461992000-03-14 18:30:20 +0000501xmlNodePtr xmlNewCharRef (xmlDocPtr doc,
502 const xmlChar *name);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000503xmlNodePtr xmlNewReference (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000504 const xmlChar *name);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000505xmlNodePtr xmlCopyNode (xmlNodePtr node,
506 int recursive);
507xmlNodePtr xmlCopyNodeList (xmlNodePtr node);
Daniel Veillard2eac5032000-01-09 21:08:56 +0000508xmlNodePtr xmlNewDocFragment (xmlDocPtr doc);
Daniel Veillard16253641998-10-28 22:58:05 +0000509
510/*
511 * Navigating
512 */
Daniel Veillard3dbfdca1999-12-15 19:08:23 +0000513xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000514xmlNodePtr xmlGetLastChild (xmlNodePtr parent);
515int xmlNodeIsText (xmlNodePtr node);
Daniel Veillard3e6d2372000-03-04 11:39:43 +0000516int xmlIsBlankNode (xmlNodePtr node);
Daniel Veillard16253641998-10-28 22:58:05 +0000517
518/*
519 * Changing the structure
520 */
Daniel Veillard5cb5ab81999-12-21 15:35:29 +0000521xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc,
522 xmlNodePtr root);
523void xmlNodeSetName (xmlNodePtr cur,
524 const xmlChar *name);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000525xmlNodePtr xmlAddChild (xmlNodePtr parent,
526 xmlNodePtr cur);
Daniel Veillard87b95392000-08-12 21:12:04 +0000527xmlNodePtr xmlAddChildList (xmlNodePtr parent,
528 xmlNodePtr cur);
Daniel Veillard5cb5ab81999-12-21 15:35:29 +0000529xmlNodePtr xmlReplaceNode (xmlNodePtr old,
530 xmlNodePtr cur);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000531xmlNodePtr xmlAddSibling (xmlNodePtr cur,
532 xmlNodePtr elem);
Daniel Veillard5cb5ab81999-12-21 15:35:29 +0000533xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur,
534 xmlNodePtr elem);
535xmlNodePtr xmlAddNextSibling (xmlNodePtr cur,
536 xmlNodePtr elem);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000537void xmlUnlinkNode (xmlNodePtr cur);
538xmlNodePtr xmlTextMerge (xmlNodePtr first,
539 xmlNodePtr second);
540void xmlTextConcat (xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000541 const xmlChar *content,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000542 int len);
543void xmlFreeNodeList (xmlNodePtr cur);
544void xmlFreeNode (xmlNodePtr cur);
Daniel Veillardc2def842000-11-07 14:21:01 +0000545void xmlSetTreeDoc (xmlNodePtr tree,
546 xmlDocPtr doc);
547void xmlSetListDoc (xmlNodePtr list,
548 xmlDocPtr doc);
Daniel Veillard16253641998-10-28 22:58:05 +0000549
550/*
551 * Namespaces
552 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000553xmlNsPtr xmlSearchNs (xmlDocPtr doc,
554 xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000555 const xmlChar *nameSpace);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000556xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc,
557 xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000558 const xmlChar *href);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000559xmlNsPtr * xmlGetNsList (xmlDocPtr doc,
560 xmlNodePtr node);
561void xmlSetNs (xmlNodePtr node,
562 xmlNsPtr ns);
563xmlNsPtr xmlCopyNamespace (xmlNsPtr cur);
564xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000565
Daniel Veillard16253641998-10-28 22:58:05 +0000566/*
567 * Changing the content.
568 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000569xmlAttrPtr xmlSetProp (xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000570 const xmlChar *name,
571 const xmlChar *value);
Daniel Veillard6077d031999-10-09 09:11:45 +0000572xmlChar * xmlGetProp (xmlNodePtr node,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000573 const xmlChar *name);
Daniel Veillard32bc74e2000-07-14 14:49:25 +0000574xmlAttrPtr xmlHasProp (xmlNodePtr node,
575 const xmlChar *name);
Daniel Veillard5a2b6972001-01-20 21:15:50 +0000576xmlAttrPtr xmlSetNsProp (xmlNodePtr node,
577 xmlNsPtr ns,
578 const xmlChar *name,
579 const xmlChar *value);
Daniel Veillard10a2c651999-12-12 13:03:50 +0000580xmlChar * xmlGetNsProp (xmlNodePtr node,
581 const xmlChar *name,
Ramiro Estrugobfce3771999-12-15 04:32:07 +0000582 const xmlChar *nameSpace);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000583xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000584 const xmlChar *value);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000585xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000586 const xmlChar *value,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000587 int len);
Daniel Veillard6077d031999-10-09 09:11:45 +0000588xmlChar * xmlNodeListGetString (xmlDocPtr doc,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000589 xmlNodePtr list,
590 int inLine);
Daniel Veillardbe803962000-06-28 23:40:59 +0000591xmlChar * xmlNodeListGetRawString (xmlDocPtr doc,
592 xmlNodePtr list,
593 int inLine);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000594void xmlNodeSetContent (xmlNodePtr cur,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000595 const xmlChar *content);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000596void xmlNodeSetContentLen (xmlNodePtr cur,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000597 const xmlChar *content,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000598 int len);
599void xmlNodeAddContent (xmlNodePtr cur,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000600 const xmlChar *content);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000601void xmlNodeAddContentLen (xmlNodePtr cur,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000602 const xmlChar *content,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000603 int len);
Daniel Veillard6077d031999-10-09 09:11:45 +0000604xmlChar * xmlNodeGetContent (xmlNodePtr cur);
Daniel Veillarda819dac1999-11-24 18:04:22 +0000605xmlChar * xmlNodeGetLang (xmlNodePtr cur);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000606void xmlNodeSetLang (xmlNodePtr cur,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000607 const xmlChar *lang);
Daniel Veillardcf461992000-03-14 18:30:20 +0000608int xmlNodeGetSpacePreserve (xmlNodePtr cur);
Daniel Veillardbe9ec4b2000-10-25 11:01:53 +0000609void xmlNodeSetSpacePreserve (xmlNodePtr cur, int
610 val);
Daniel Veillard10a2c651999-12-12 13:03:50 +0000611xmlChar * xmlNodeGetBase (xmlDocPtr doc,
612 xmlNodePtr cur);
Daniel Veillardbe9ec4b2000-10-25 11:01:53 +0000613void xmlNodeSetBase (xmlNodePtr cur,
614 xmlChar *uri);
Daniel Veillard16253641998-10-28 22:58:05 +0000615
616/*
Daniel Veillardc08a2c61999-09-08 21:35:25 +0000617 * Removing content.
618 */
Daniel Veillardcf461992000-03-14 18:30:20 +0000619int xmlRemoveProp (xmlAttrPtr attr);
Daniel Veillardc08a2c61999-09-08 21:35:25 +0000620int xmlRemoveNode (xmlNodePtr node); /* TODO */
621
622/*
Daniel Veillard16253641998-10-28 22:58:05 +0000623 * Internal, don't use
624 */
Daniel Veillardce6e98d2000-11-25 09:54:49 +0000625#ifdef VMS
626void xmlBufferWriteXmlCHAR (xmlBufferPtr buf,
627 const xmlChar *string);
628#define xmlBufferWriteCHAR xmlBufferWriteXmlCHAR
629#else
Daniel Veillardb96e6431999-08-29 21:02:19 +0000630void xmlBufferWriteCHAR (xmlBufferPtr buf,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000631 const xmlChar *string);
Daniel Veillardce6e98d2000-11-25 09:54:49 +0000632#endif
Daniel Veillardb96e6431999-08-29 21:02:19 +0000633void xmlBufferWriteChar (xmlBufferPtr buf,
634 const char *string);
635void xmlBufferWriteQuotedString(xmlBufferPtr buf,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000636 const xmlChar *string);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000637
Daniel Veillard16253641998-10-28 22:58:05 +0000638/*
Daniel Veillardcf461992000-03-14 18:30:20 +0000639 * Namespace handling
640 */
641int xmlReconciliateNs (xmlDocPtr doc,
642 xmlNodePtr tree);
643
644/*
Daniel Veillard16253641998-10-28 22:58:05 +0000645 * Saving
646 */
Daniel Veillarda6d8eb62000-12-27 10:46:47 +0000647void xmlDocDumpFormatMemory (xmlDocPtr cur,
648 xmlChar**mem,
649 int *size,
650 int format);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000651void xmlDocDumpMemory (xmlDocPtr cur,
Daniel Veillarddd6b3671999-09-23 22:19:22 +0000652 xmlChar**mem,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000653 int *size);
Daniel Veillard58770e72000-11-25 00:48:47 +0000654void xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
655 xmlChar **doc_txt_ptr,
656 int * doc_txt_len,
657 const char *txt_encoding);
Daniel Veillarda6d8eb62000-12-27 10:46:47 +0000658void xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
659 xmlChar **doc_txt_ptr,
660 int * doc_txt_len,
661 const char *txt_encoding,
662 int format);
Daniel Veillardbe803962000-06-28 23:40:59 +0000663int xmlDocDump (FILE *f,
Daniel Veillardb96e6431999-08-29 21:02:19 +0000664 xmlDocPtr cur);
Daniel Veillarddbfd6411999-12-28 16:35:14 +0000665void xmlElemDump (FILE *f,
Daniel Veillard06047432000-04-24 11:33:38 +0000666 xmlDocPtr doc,
667 xmlNodePtr cur);
Daniel Veillardb96e6431999-08-29 21:02:19 +0000668int xmlSaveFile (const char *filename,
669 xmlDocPtr cur);
Daniel Veillardb656ebe2000-09-22 13:51:48 +0000670void xmlNodeDump (xmlBufferPtr buf,
671 xmlDocPtr doc,
672 xmlNodePtr cur,
673 int level,
674 int format);
Daniel Veillard151b1b01998-09-23 00:49:46 +0000675
Daniel Veillardbe803962000-06-28 23:40:59 +0000676/* This one is exported from xmlIO.h
677
678int xmlSaveFileTo (xmlOutputBuffer *buf,
679 xmlDocPtr cur,
680 const char *encoding);
681 */
682
683int xmlSaveFileEnc (const char *filename,
684 xmlDocPtr cur,
685 const char *encoding);
686
Daniel Veillard16253641998-10-28 22:58:05 +0000687/*
688 * Compression
689 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000690int xmlGetDocCompressMode (xmlDocPtr doc);
691void xmlSetDocCompressMode (xmlDocPtr doc,
692 int mode);
693int xmlGetCompressMode (void);
694void xmlSetCompressMode (int mode);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000695
696#ifdef __cplusplus
697}
698#endif
699
700#endif /* __XML_TREE_H__ */
701