blob: 6d22ac12a66440b3438f19b3b086edb4613ca4bf [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 Veillard260a68f1998-08-13 03:39:55 +00008 */
9
10#ifndef __XML_TREE_H__
11#define __XML_TREE_H__
12
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
Daniel Veillard39a1f9a1999-01-17 19:11:59 +000018#include <stdio.h>
19
Daniel Veillard260a68f1998-08-13 03:39:55 +000020/*
Daniel Veillardccb09631998-10-27 06:21:04 +000021 * The different element types carried by an XML tree
22 *
23 * NOTE: This is synchronized with DOM Level1 values
24 * See http://www.w3.org/TR/REC-DOM-Level-1/
25 */
26typedef enum {
27 XML_ELEMENT_NODE= 1,
28 XML_ATTRIBUTE_NODE= 2,
29 XML_TEXT_NODE= 3,
30 XML_CDATA_SECTION_NODE= 4,
31 XML_ENTITY_REF_NODE= 5,
32 XML_ENTITY_NODE= 6,
33 XML_PI_NODE= 7,
34 XML_COMMENT_NODE= 8,
35 XML_DOCUMENT_NODE= 9,
36 XML_DOCUMENT_TYPE_NODE= 10,
37 XML_DOCUMENT_FRAG_NODE= 11,
38 XML_NOTATION_NODE= 12
39} xmlElementType;
40
41/*
Daniel Veillard0ba4d531998-11-01 19:34:31 +000042 * Size of an internal character representation.
43 *
44 * Currently we use 8bit chars internal representation for memory efficiency,
45 * but the parser is not tied to that, just define UNICODE to switch to
46 * a 16 bits internal representation. Note that with 8 bits wide
47 * CHARs one can still use UTF-8 to handle correctly non ISO-Latin
48 * input.
Daniel Veillard260a68f1998-08-13 03:39:55 +000049 */
50#ifdef UNICODE
51typedef unsigned short CHAR;
52#else
53typedef unsigned char CHAR;
54#endif
55
Daniel Veillardb96e6431999-08-29 21:02:19 +000056#define BAD_CAST (CHAR *)
57
Daniel Veillard260a68f1998-08-13 03:39:55 +000058/*
59 * a DTD Notation definition
Daniel Veillard260a68f1998-08-13 03:39:55 +000060 */
61
Daniel Veillard1e346af1999-02-22 10:33:01 +000062typedef struct xmlNotation {
63 const CHAR *name; /* Notation name */
64 const CHAR *PublicID; /* Public identifier, if any */
65 const CHAR *SystemID; /* System identifier, if any */
66} xmlNotation;
67typedef xmlNotation *xmlNotationPtr;
68
Daniel Veillard260a68f1998-08-13 03:39:55 +000069/*
70 * a DTD Attribute definition
Daniel Veillard260a68f1998-08-13 03:39:55 +000071 */
72
Daniel Veillard1e346af1999-02-22 10:33:01 +000073typedef enum {
74 XML_ATTRIBUTE_CDATA = 1,
75 XML_ATTRIBUTE_ID,
76 XML_ATTRIBUTE_IDREF ,
77 XML_ATTRIBUTE_IDREFS,
78 XML_ATTRIBUTE_ENTITY,
79 XML_ATTRIBUTE_ENTITIES,
80 XML_ATTRIBUTE_NMTOKEN,
81 XML_ATTRIBUTE_NMTOKENS,
82 XML_ATTRIBUTE_ENUMERATION,
83 XML_ATTRIBUTE_NOTATION
84} xmlAttributeType;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +000085
Daniel Veillard1e346af1999-02-22 10:33:01 +000086typedef enum {
87 XML_ATTRIBUTE_NONE = 1,
88 XML_ATTRIBUTE_REQUIRED,
89 XML_ATTRIBUTE_IMPLIED,
90 XML_ATTRIBUTE_FIXED
91} xmlAttributeDefault;
92
93typedef struct xmlEnumeration {
94 struct xmlEnumeration *next; /* next one */
95 const CHAR *name; /* Enumeration name */
96} xmlEnumeration;
97typedef xmlEnumeration *xmlEnumerationPtr;
98
99typedef struct xmlAttribute {
100 const CHAR *elem; /* Element holding the attribute */
101 const CHAR *name; /* Attribute name */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000102 struct xmlAttribute *next; /* list of attributes of an element */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000103 xmlAttributeType type; /* The type */
104 xmlAttributeDefault def; /* the default */
105 const CHAR *defaultValue;/* or the default value */
106 xmlEnumerationPtr tree; /* or the enumeration tree if any */
107} xmlAttribute;
108typedef xmlAttribute *xmlAttributePtr;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000109
Daniel Veillard260a68f1998-08-13 03:39:55 +0000110/*
111 * a DTD Element definition.
112 */
Daniel Veillard1899e851999-02-01 12:18:54 +0000113typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000114 XML_ELEMENT_CONTENT_PCDATA = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000115 XML_ELEMENT_CONTENT_ELEMENT,
116 XML_ELEMENT_CONTENT_SEQ,
117 XML_ELEMENT_CONTENT_OR
118} xmlElementContentType;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000119
Daniel Veillard1899e851999-02-01 12:18:54 +0000120typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000121 XML_ELEMENT_CONTENT_ONCE = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000122 XML_ELEMENT_CONTENT_OPT,
123 XML_ELEMENT_CONTENT_MULT,
124 XML_ELEMENT_CONTENT_PLUS
125} xmlElementContentOccur;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000126
127typedef struct xmlElementContent {
Daniel Veillard1899e851999-02-01 12:18:54 +0000128 xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
129 xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
130 const CHAR *name; /* Element name */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000131 struct xmlElementContent *c1; /* first child */
132 struct xmlElementContent *c2; /* second child */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000133} xmlElementContent;
134typedef xmlElementContent *xmlElementContentPtr;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000135
Daniel Veillard1899e851999-02-01 12:18:54 +0000136typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000137 XML_ELEMENT_TYPE_EMPTY = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000138 XML_ELEMENT_TYPE_ANY,
139 XML_ELEMENT_TYPE_MIXED,
140 XML_ELEMENT_TYPE_ELEMENT
141} xmlElementTypeVal;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000142
143typedef struct xmlElement {
Daniel Veillardb05deb71999-08-10 19:04:08 +0000144 const CHAR *name; /* Element name */
145 xmlElementTypeVal type; /* The type */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000146 xmlElementContentPtr content; /* the allowed element content */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000147 xmlAttributePtr attributes; /* List of the declared attributes */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000148} xmlElement;
149typedef xmlElement *xmlElementPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000150
151/*
152 * An XML namespace.
153 * Note that prefix == NULL is valid, it defines the default namespace
154 * within the subtree (until overriden).
155 */
156
Daniel Veillard1899e851999-02-01 12:18:54 +0000157typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000158 XML_GLOBAL_NAMESPACE = 1, /* old style global namespace */
Daniel Veillard1899e851999-02-01 12:18:54 +0000159 XML_LOCAL_NAMESPACE /* new style local scoping */
160} xmlNsType;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000161
162typedef struct xmlNs {
163 struct xmlNs *next; /* next Ns link for this node */
Daniel Veillard1899e851999-02-01 12:18:54 +0000164 xmlNsType type; /* global or local */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000165 const CHAR *href; /* URL for the namespace */
166 const CHAR *prefix; /* prefix for the namespace */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000167} xmlNs;
168typedef xmlNs *xmlNsPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000169
170/*
171 * An XML DtD, as defined by <!DOCTYPE.
172 */
173typedef struct xmlDtd {
174 const CHAR *name; /* Name of the DTD */
175 const CHAR *ExternalID; /* External identifier for PUBLIC DTD */
176 const CHAR *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000177 void *notations; /* Hash table for notations if any */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000178 void *elements; /* Hash table for elements if any */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000179 void *attributes; /* Hash table for attributes if any */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000180 void *entities; /* Hash table for entities if any */
181 /* struct xmlDtd *next; * next link for this document */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000182} xmlDtd;
183typedef xmlDtd *xmlDtdPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000184
185/*
186 * A attribute of an XML node.
187 */
188typedef struct xmlAttr {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000189#ifndef XML_WITHOUT_CORBA
190 void *_private; /* for Corba, must be first ! */
191 void *vepv; /* for Corba, must be next ! */
192#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000193 xmlElementType type; /* XML_ATTRIBUTE_NODE, must be third ! */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000194 struct xmlNode *node; /* attr->node link */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000195 struct xmlAttr *next; /* attribute list link */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000196 const CHAR *name; /* the name of the property */
Daniel Veillardccb09631998-10-27 06:21:04 +0000197 struct xmlNode *val; /* the value of the property */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000198 xmlNs *ns; /* pointer to the associated namespace */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000199} xmlAttr;
200typedef xmlAttr *xmlAttrPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000201
202/*
Daniel Veillard991e63d1999-08-15 23:32:28 +0000203 * An XML ID instance.
204 */
205
206typedef struct xmlID {
207 struct xmlID *next; /* next ID */
208 const CHAR *value; /* The ID name */
209 xmlAttrPtr attr; /* The attribut holding it */
210} xmlID;
211typedef xmlID *xmlIDPtr;
212
213/*
Daniel Veillard260a68f1998-08-13 03:39:55 +0000214 * A node in an XML tree.
215 */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000216typedef struct xmlNode {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000217#ifndef XML_WITHOUT_CORBA
218 void *_private; /* for Corba, must be first ! */
219 void *vepv; /* for Corba, must be next ! */
220#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000221 xmlElementType type; /* type number in the DTD, must be third ! */
Daniel Veillard0bef1311998-10-14 02:36:47 +0000222 struct xmlDoc *doc; /* the containing document */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000223 struct xmlNode *parent; /* child->parent link */
224 struct xmlNode *next; /* next sibling link */
Daniel Veillard0bef1311998-10-14 02:36:47 +0000225 struct xmlNode *prev; /* previous sibling link */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000226 struct xmlNode *childs; /* parent->childs link */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000227 struct xmlNode *last; /* last child link */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000228 struct xmlAttr *properties; /* properties list */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000229 const CHAR *name; /* the name of the node, or the entity */
230 xmlNs *ns; /* pointer to the associated namespace */
231 xmlNs *nsDef; /* namespace definitions on this node */
232 CHAR *content; /* the content */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000233} _xmlNode;
234typedef _xmlNode xmlNode;
235typedef _xmlNode *xmlNodePtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000236
237/*
238 * An XML document.
239 */
240typedef struct xmlDoc {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000241#ifndef XML_WITHOUT_CORBA
242 void *_private; /* for Corba, must be first ! */
243 void *vepv; /* for Corba, must be next ! */
244#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000245 xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000246 char *name; /* name/filename/URI of the document */
247 const CHAR *version; /* the XML version string */
248 const CHAR *encoding; /* encoding, if any */
Daniel Veillard15a8df41998-09-24 19:15:06 +0000249 int compression;/* level of zlib compression */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000250 int standalone; /* standalone document (no external refs) */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000251 struct xmlDtd *intSubset; /* the document internal subset */
252 struct xmlDtd *extSubset; /* the document external subset */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000253 struct xmlNs *oldNs; /* Global namespace, the old way */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000254 struct xmlNode *root; /* the document tree */
Daniel Veillard991e63d1999-08-15 23:32:28 +0000255 void *ids; /* Hash table for ID attributes if any */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000256} _xmlDoc;
257typedef _xmlDoc xmlDoc;
258typedef xmlDoc *xmlDocPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000259
260/*
Daniel Veillard5099ae81999-04-21 20:12:07 +0000261 * A buffer structure
262 */
263
264typedef struct xmlBuffer {
265 CHAR *content; /* The buffer content UTF8 */
266 unsigned int use; /* The buffer size used */
267 unsigned int size; /* The buffer size */
268} _xmlBuffer;
269typedef _xmlBuffer xmlBuffer;
270typedef xmlBuffer *xmlBufferPtr;
271
272/*
Daniel Veillard260a68f1998-08-13 03:39:55 +0000273 * Variables.
274 */
275extern xmlNsPtr baseDTD;
276extern int oldXMLWDcompatibility;/* maintain compatibility with old WD */
277extern int xmlIndentTreeOutput; /* try to indent the tree dumps */
278
279/*
Daniel Veillard5099ae81999-04-21 20:12:07 +0000280 * Handling Buffers.
281 */
282
Daniel Veillardb96e6431999-08-29 21:02:19 +0000283xmlBufferPtr xmlBufferCreate (void);
284void xmlBufferFree (xmlBufferPtr buf);
285int xmlBufferDump (FILE *file,
286 xmlBufferPtr buf);
287void xmlBufferAdd (xmlBufferPtr buf,
288 const CHAR *str,
289 int len);
290void xmlBufferCat (xmlBufferPtr buf,
291 const CHAR *str);
292void xmlBufferCCat (xmlBufferPtr buf,
293 const char *str);
294int xmlBufferShrink (xmlBufferPtr buf,
295 int len);
296void xmlBufferEmpty (xmlBufferPtr buf);
Daniel Veillard5099ae81999-04-21 20:12:07 +0000297
298/*
Daniel Veillard16253641998-10-28 22:58:05 +0000299 * Creating/freeing new structures
Daniel Veillard260a68f1998-08-13 03:39:55 +0000300 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000301xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc,
302 const CHAR *name,
303 const CHAR *ExternalID,
304 const CHAR *SystemID);
305xmlDtdPtr xmlNewDtd (xmlDocPtr doc,
306 const CHAR *name,
307 const CHAR *ExternalID,
308 const CHAR *SystemID);
309void xmlFreeDtd (xmlDtdPtr cur);
310xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc,
311 const CHAR *href,
312 const CHAR *prefix);
313xmlNsPtr xmlNewNs (xmlNodePtr node,
314 const CHAR *href,
315 const CHAR *prefix);
316void xmlFreeNs (xmlNsPtr cur);
317xmlDocPtr xmlNewDoc (const CHAR *version);
318void xmlFreeDoc (xmlDocPtr cur);
319xmlAttrPtr xmlNewDocProp (xmlDocPtr doc,
320 const CHAR *name,
321 const CHAR *value);
322xmlAttrPtr xmlNewProp (xmlNodePtr node,
323 const CHAR *name,
324 const CHAR *value);
325xmlAttrPtr xmlNewNsProp (xmlNodePtr node,
326 xmlNsPtr ns,
327 const CHAR *name,
328 const CHAR *value);
329void xmlFreePropList (xmlAttrPtr cur);
330void xmlFreeProp (xmlAttrPtr cur);
331xmlAttrPtr xmlCopyProp (xmlNodePtr target,
332 xmlAttrPtr cur);
333xmlAttrPtr xmlCopyPropList (xmlNodePtr target,
334 xmlAttrPtr cur);
335xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd);
336xmlDocPtr xmlCopyDoc (xmlDocPtr doc,
337 int recursive);
Daniel Veillard16253641998-10-28 22:58:05 +0000338
339/*
340 * Creating new nodes
341 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000342xmlNodePtr xmlNewDocNode (xmlDocPtr doc,
343 xmlNsPtr ns,
344 const CHAR *name,
345 const CHAR *content);
346xmlNodePtr xmlNewNode (xmlNsPtr ns,
347 const CHAR *name);
348xmlNodePtr xmlNewChild (xmlNodePtr parent,
349 xmlNsPtr ns,
350 const CHAR *name,
351 const CHAR *content);
352xmlNodePtr xmlNewDocText (xmlDocPtr doc,
353 const CHAR *content);
354xmlNodePtr xmlNewText (const CHAR *content);
355xmlNodePtr xmlNewPI (const CHAR *name,
356 const CHAR *content);
357xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc,
358 const CHAR *content,
359 int len);
360xmlNodePtr xmlNewTextLen (const CHAR *content,
361 int len);
362xmlNodePtr xmlNewDocComment (xmlDocPtr doc,
363 const CHAR *content);
364xmlNodePtr xmlNewComment (const CHAR *content);
365xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc,
366 const CHAR *content,
367 int len);
368xmlNodePtr xmlNewReference (xmlDocPtr doc,
369 const CHAR *name);
370xmlNodePtr xmlCopyNode (xmlNodePtr node,
371 int recursive);
372xmlNodePtr xmlCopyNodeList (xmlNodePtr node);
Daniel Veillard16253641998-10-28 22:58:05 +0000373
374/*
375 * Navigating
376 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000377xmlNodePtr xmlGetLastChild (xmlNodePtr parent);
378int xmlNodeIsText (xmlNodePtr node);
Daniel Veillard16253641998-10-28 22:58:05 +0000379
380/*
381 * Changing the structure
382 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000383xmlNodePtr xmlAddChild (xmlNodePtr parent,
384 xmlNodePtr cur);
385xmlNodePtr xmlAddSibling (xmlNodePtr cur,
386 xmlNodePtr elem);
387void xmlUnlinkNode (xmlNodePtr cur);
388xmlNodePtr xmlTextMerge (xmlNodePtr first,
389 xmlNodePtr second);
390void xmlTextConcat (xmlNodePtr node,
391 const CHAR *content,
392 int len);
393void xmlFreeNodeList (xmlNodePtr cur);
394void xmlFreeNode (xmlNodePtr cur);
Daniel Veillard16253641998-10-28 22:58:05 +0000395
396/*
397 * Namespaces
398 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000399xmlNsPtr xmlSearchNs (xmlDocPtr doc,
400 xmlNodePtr node,
401 const CHAR *nameSpace);
402xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc,
403 xmlNodePtr node,
404 const CHAR *href);
405xmlNsPtr * xmlGetNsList (xmlDocPtr doc,
406 xmlNodePtr node);
407void xmlSetNs (xmlNodePtr node,
408 xmlNsPtr ns);
409xmlNsPtr xmlCopyNamespace (xmlNsPtr cur);
410xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000411
Daniel Veillard16253641998-10-28 22:58:05 +0000412/*
413 * Changing the content.
414 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000415xmlAttrPtr xmlSetProp (xmlNodePtr node,
416 const CHAR *name,
417 const CHAR *value);
418CHAR * xmlGetProp (xmlNodePtr node,
419 const CHAR *name);
420xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc,
421 const CHAR *value);
422xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc,
423 const CHAR *value,
424 int len);
425CHAR * xmlNodeListGetString (xmlDocPtr doc,
426 xmlNodePtr list,
427 int inLine);
428void xmlNodeSetContent (xmlNodePtr cur,
429 const CHAR *content);
430void xmlNodeSetContentLen (xmlNodePtr cur,
431 const CHAR *content,
432 int len);
433void xmlNodeAddContent (xmlNodePtr cur,
434 const CHAR *content);
435void xmlNodeAddContentLen (xmlNodePtr cur,
436 const CHAR *content,
437 int len);
438CHAR * xmlNodeGetContent (xmlNodePtr cur);
439const CHAR * xmlNodeGetLang (xmlNodePtr cur);
440void xmlNodeSetLang (xmlNodePtr cur,
441 const CHAR *lang);
Daniel Veillard16253641998-10-28 22:58:05 +0000442
443/*
444 * Internal, don't use
445 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000446void xmlBufferWriteCHAR (xmlBufferPtr buf,
447 const CHAR *string);
448void xmlBufferWriteChar (xmlBufferPtr buf,
449 const char *string);
450void xmlBufferWriteQuotedString(xmlBufferPtr buf,
451 const CHAR *string);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000452
Daniel Veillard16253641998-10-28 22:58:05 +0000453/*
454 * Saving
455 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000456void xmlDocDumpMemory (xmlDocPtr cur,
457 CHAR**mem,
458 int *size);
459void xmlDocDump (FILE *f,
460 xmlDocPtr cur);
461int xmlSaveFile (const char *filename,
462 xmlDocPtr cur);
Daniel Veillard151b1b01998-09-23 00:49:46 +0000463
Daniel Veillard16253641998-10-28 22:58:05 +0000464/*
465 * Compression
466 */
Daniel Veillardb96e6431999-08-29 21:02:19 +0000467int xmlGetDocCompressMode (xmlDocPtr doc);
468void xmlSetDocCompressMode (xmlDocPtr doc,
469 int mode);
470int xmlGetCompressMode (void);
471void xmlSetCompressMode (int mode);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000472
473#ifdef __cplusplus
474}
475#endif
476
477#endif /* __XML_TREE_H__ */
478