blob: fa70ba37c9d38428fca135b5d7dad7e5dd08a4b0 [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
56/*
57 * a DTD Notation definition
Daniel Veillard260a68f1998-08-13 03:39:55 +000058 */
59
Daniel Veillard1e346af1999-02-22 10:33:01 +000060typedef struct xmlNotation {
61 const CHAR *name; /* Notation name */
62 const CHAR *PublicID; /* Public identifier, if any */
63 const CHAR *SystemID; /* System identifier, if any */
64} xmlNotation;
65typedef xmlNotation *xmlNotationPtr;
66
Daniel Veillard260a68f1998-08-13 03:39:55 +000067/*
68 * a DTD Attribute definition
Daniel Veillard260a68f1998-08-13 03:39:55 +000069 */
70
Daniel Veillard1e346af1999-02-22 10:33:01 +000071typedef enum {
72 XML_ATTRIBUTE_CDATA = 1,
73 XML_ATTRIBUTE_ID,
74 XML_ATTRIBUTE_IDREF ,
75 XML_ATTRIBUTE_IDREFS,
76 XML_ATTRIBUTE_ENTITY,
77 XML_ATTRIBUTE_ENTITIES,
78 XML_ATTRIBUTE_NMTOKEN,
79 XML_ATTRIBUTE_NMTOKENS,
80 XML_ATTRIBUTE_ENUMERATION,
81 XML_ATTRIBUTE_NOTATION
82} xmlAttributeType;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +000083
Daniel Veillard1e346af1999-02-22 10:33:01 +000084typedef enum {
85 XML_ATTRIBUTE_NONE = 1,
86 XML_ATTRIBUTE_REQUIRED,
87 XML_ATTRIBUTE_IMPLIED,
88 XML_ATTRIBUTE_FIXED
89} xmlAttributeDefault;
90
91typedef struct xmlEnumeration {
92 struct xmlEnumeration *next; /* next one */
93 const CHAR *name; /* Enumeration name */
94} xmlEnumeration;
95typedef xmlEnumeration *xmlEnumerationPtr;
96
97typedef struct xmlAttribute {
98 const CHAR *elem; /* Element holding the attribute */
99 const CHAR *name; /* Attribute name */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000100 struct xmlAttribute *next; /* list of attributes of an element */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000101 xmlAttributeType type; /* The type */
102 xmlAttributeDefault def; /* the default */
103 const CHAR *defaultValue;/* or the default value */
104 xmlEnumerationPtr tree; /* or the enumeration tree if any */
105} xmlAttribute;
106typedef xmlAttribute *xmlAttributePtr;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000107
Daniel Veillard260a68f1998-08-13 03:39:55 +0000108/*
109 * a DTD Element definition.
110 */
Daniel Veillard1899e851999-02-01 12:18:54 +0000111typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000112 XML_ELEMENT_CONTENT_PCDATA = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000113 XML_ELEMENT_CONTENT_ELEMENT,
114 XML_ELEMENT_CONTENT_SEQ,
115 XML_ELEMENT_CONTENT_OR
116} xmlElementContentType;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000117
Daniel Veillard1899e851999-02-01 12:18:54 +0000118typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000119 XML_ELEMENT_CONTENT_ONCE = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000120 XML_ELEMENT_CONTENT_OPT,
121 XML_ELEMENT_CONTENT_MULT,
122 XML_ELEMENT_CONTENT_PLUS
123} xmlElementContentOccur;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000124
125typedef struct xmlElementContent {
Daniel Veillard1899e851999-02-01 12:18:54 +0000126 xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
127 xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
128 const CHAR *name; /* Element name */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000129 struct xmlElementContent *c1; /* first child */
130 struct xmlElementContent *c2; /* second child */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000131} xmlElementContent;
132typedef xmlElementContent *xmlElementContentPtr;
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000133
Daniel Veillard1899e851999-02-01 12:18:54 +0000134typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000135 XML_ELEMENT_TYPE_EMPTY = 1,
Daniel Veillard1899e851999-02-01 12:18:54 +0000136 XML_ELEMENT_TYPE_ANY,
137 XML_ELEMENT_TYPE_MIXED,
138 XML_ELEMENT_TYPE_ELEMENT
139} xmlElementTypeVal;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000140
141typedef struct xmlElement {
Daniel Veillardb05deb71999-08-10 19:04:08 +0000142 const CHAR *name; /* Element name */
143 xmlElementTypeVal type; /* The type */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000144 xmlElementContentPtr content; /* the allowed element content */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000145 xmlAttributePtr attributes; /* List of the declared attributes */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000146} xmlElement;
147typedef xmlElement *xmlElementPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000148
149/*
150 * An XML namespace.
151 * Note that prefix == NULL is valid, it defines the default namespace
152 * within the subtree (until overriden).
153 */
154
Daniel Veillard1899e851999-02-01 12:18:54 +0000155typedef enum {
Daniel Veillard1e346af1999-02-22 10:33:01 +0000156 XML_GLOBAL_NAMESPACE = 1, /* old style global namespace */
Daniel Veillard1899e851999-02-01 12:18:54 +0000157 XML_LOCAL_NAMESPACE /* new style local scoping */
158} xmlNsType;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000159
160typedef struct xmlNs {
161 struct xmlNs *next; /* next Ns link for this node */
Daniel Veillard1899e851999-02-01 12:18:54 +0000162 xmlNsType type; /* global or local */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000163 const CHAR *href; /* URL for the namespace */
164 const CHAR *prefix; /* prefix for the namespace */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000165} xmlNs;
166typedef xmlNs *xmlNsPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000167
168/*
169 * An XML DtD, as defined by <!DOCTYPE.
170 */
171typedef struct xmlDtd {
172 const CHAR *name; /* Name of the DTD */
173 const CHAR *ExternalID; /* External identifier for PUBLIC DTD */
174 const CHAR *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000175 void *notations; /* Hash table for notations if any */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000176 void *elements; /* Hash table for elements if any */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000177 void *attributes; /* Hash table for attributes if any */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000178 void *entities; /* Hash table for entities if any */
179 /* struct xmlDtd *next; * next link for this document */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000180} xmlDtd;
181typedef xmlDtd *xmlDtdPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000182
183/*
184 * A attribute of an XML node.
185 */
186typedef struct xmlAttr {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000187#ifndef XML_WITHOUT_CORBA
188 void *_private; /* for Corba, must be first ! */
189 void *vepv; /* for Corba, must be next ! */
190#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000191 xmlElementType type; /* XML_ATTRIBUTE_NODE, must be third ! */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000192 struct xmlNode *node; /* attr->node link */
Daniel Veillardb05deb71999-08-10 19:04:08 +0000193 struct xmlAttr *next; /* attribute list link */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000194 const CHAR *name; /* the name of the property */
Daniel Veillardccb09631998-10-27 06:21:04 +0000195 struct xmlNode *val; /* the value of the property */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000196} xmlAttr;
197typedef xmlAttr *xmlAttrPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000198
199/*
Daniel Veillard991e63d1999-08-15 23:32:28 +0000200 * An XML ID instance.
201 */
202
203typedef struct xmlID {
204 struct xmlID *next; /* next ID */
205 const CHAR *value; /* The ID name */
206 xmlAttrPtr attr; /* The attribut holding it */
207} xmlID;
208typedef xmlID *xmlIDPtr;
209
210/*
Daniel Veillard260a68f1998-08-13 03:39:55 +0000211 * A node in an XML tree.
212 */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000213typedef struct xmlNode {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000214#ifndef XML_WITHOUT_CORBA
215 void *_private; /* for Corba, must be first ! */
216 void *vepv; /* for Corba, must be next ! */
217#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000218 xmlElementType type; /* type number in the DTD, must be third ! */
Daniel Veillard0bef1311998-10-14 02:36:47 +0000219 struct xmlDoc *doc; /* the containing document */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000220 struct xmlNode *parent; /* child->parent link */
221 struct xmlNode *next; /* next sibling link */
Daniel Veillard0bef1311998-10-14 02:36:47 +0000222 struct xmlNode *prev; /* previous sibling link */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000223 struct xmlNode *childs; /* parent->childs link */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000224 struct xmlNode *last; /* last child link */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000225 struct xmlAttr *properties; /* properties list */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000226 const CHAR *name; /* the name of the node, or the entity */
227 xmlNs *ns; /* pointer to the associated namespace */
228 xmlNs *nsDef; /* namespace definitions on this node */
229 CHAR *content; /* the content */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000230} _xmlNode;
231typedef _xmlNode xmlNode;
232typedef _xmlNode *xmlNodePtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000233
234/*
235 * An XML document.
236 */
237typedef struct xmlDoc {
Daniel Veillard27fb0751998-10-17 06:47:46 +0000238#ifndef XML_WITHOUT_CORBA
239 void *_private; /* for Corba, must be first ! */
240 void *vepv; /* for Corba, must be next ! */
241#endif
Daniel Veillardccb09631998-10-27 06:21:04 +0000242 xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000243 char *name; /* name/filename/URI of the document */
244 const CHAR *version; /* the XML version string */
245 const CHAR *encoding; /* encoding, if any */
Daniel Veillard15a8df41998-09-24 19:15:06 +0000246 int compression;/* level of zlib compression */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000247 int standalone; /* standalone document (no external refs) */
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000248 struct xmlDtd *intSubset; /* the document internal subset */
249 struct xmlDtd *extSubset; /* the document external subset */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000250 struct xmlNs *oldNs; /* Global namespace, the old way */
Daniel Veillard260a68f1998-08-13 03:39:55 +0000251 struct xmlNode *root; /* the document tree */
Daniel Veillard991e63d1999-08-15 23:32:28 +0000252 void *ids; /* Hash table for ID attributes if any */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000253} _xmlDoc;
254typedef _xmlDoc xmlDoc;
255typedef xmlDoc *xmlDocPtr;
Daniel Veillard260a68f1998-08-13 03:39:55 +0000256
257/*
Daniel Veillard5099ae81999-04-21 20:12:07 +0000258 * A buffer structure
259 */
260
261typedef struct xmlBuffer {
262 CHAR *content; /* The buffer content UTF8 */
263 unsigned int use; /* The buffer size used */
264 unsigned int size; /* The buffer size */
265} _xmlBuffer;
266typedef _xmlBuffer xmlBuffer;
267typedef xmlBuffer *xmlBufferPtr;
268
269/*
Daniel Veillard260a68f1998-08-13 03:39:55 +0000270 * Variables.
271 */
272extern xmlNsPtr baseDTD;
273extern int oldXMLWDcompatibility;/* maintain compatibility with old WD */
274extern int xmlIndentTreeOutput; /* try to indent the tree dumps */
275
276/*
Daniel Veillard5099ae81999-04-21 20:12:07 +0000277 * Handling Buffers.
278 */
279
280xmlBufferPtr xmlBufferCreate(void);
281void xmlBufferFree(xmlBufferPtr buf);
282int xmlBufferDump(FILE *file, xmlBufferPtr buf);
283void xmlBufferAdd(xmlBufferPtr buf, const CHAR *str, int len);
284void xmlBufferCat(xmlBufferPtr buf, const CHAR *str);
285void xmlBufferCCat(xmlBufferPtr buf, const char *str);
Daniel Veillarde2d034d1999-07-27 19:52:06 +0000286int xmlBufferShrink(xmlBufferPtr buf, int len);
287void xmlBufferEmpty(xmlBufferPtr buf);
Daniel Veillard5099ae81999-04-21 20:12:07 +0000288
289/*
Daniel Veillard16253641998-10-28 22:58:05 +0000290 * Creating/freeing new structures
Daniel Veillard260a68f1998-08-13 03:39:55 +0000291 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000292xmlDtdPtr xmlCreateIntSubset(xmlDocPtr doc, const CHAR *name,
Daniel Veillard39a1f9a1999-01-17 19:11:59 +0000293 const CHAR *ExternalID, const CHAR *SystemID);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000294xmlDtdPtr xmlNewDtd(xmlDocPtr doc, const CHAR *name,
Daniel Veillard260a68f1998-08-13 03:39:55 +0000295 const CHAR *ExternalID, const CHAR *SystemID);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000296void xmlFreeDtd(xmlDtdPtr cur);
297xmlNsPtr xmlNewGlobalNs(xmlDocPtr doc, const CHAR *href, const CHAR *prefix);
298xmlNsPtr xmlNewNs(xmlNodePtr node, const CHAR *href, const CHAR *prefix);
299void xmlFreeNs(xmlNsPtr cur);
300xmlDocPtr xmlNewDoc(const CHAR *version);
301void xmlFreeDoc(xmlDocPtr cur);
302xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name,
Daniel Veillardccb09631998-10-27 06:21:04 +0000303 const CHAR *value);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000304xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name,
Daniel Veillard260a68f1998-08-13 03:39:55 +0000305 const CHAR *value);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000306void xmlFreePropList(xmlAttrPtr cur);
307void xmlFreeProp(xmlAttrPtr cur);
308xmlAttrPtr xmlCopyProp(xmlAttrPtr cur);
309xmlAttrPtr xmlCopyPropList(xmlAttrPtr cur);
310xmlDtdPtr xmlCopyDtd(xmlDtdPtr dtd);
311xmlDocPtr xmlCopyDoc(xmlDocPtr doc, int recursive);
Daniel Veillard16253641998-10-28 22:58:05 +0000312
313/*
314 * Creating new nodes
315 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000316xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
Daniel Veillard15b75af1999-07-26 16:42:37 +0000317 const CHAR *name, const CHAR *content);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000318xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name);
319xmlNodePtr xmlNewChild(xmlNodePtr parent, xmlNsPtr ns,
Daniel Veillard15b75af1999-07-26 16:42:37 +0000320 const CHAR *name, const CHAR *content);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000321xmlNodePtr xmlNewDocText(xmlDocPtr doc, const CHAR *content);
322xmlNodePtr xmlNewText(const CHAR *content);
323xmlNodePtr xmlNewDocTextLen(xmlDocPtr doc, const CHAR *content, int len);
324xmlNodePtr xmlNewTextLen(const CHAR *content, int len);
Daniel Veillard517752b1999-04-05 12:20:10 +0000325xmlNodePtr xmlNewDocComment(xmlDocPtr doc, const CHAR *content);
326xmlNodePtr xmlNewComment(const CHAR *content);
Daniel Veillardb05deb71999-08-10 19:04:08 +0000327xmlNodePtr xmlNewCDataBlock(xmlDocPtr doc, const CHAR *content, int len);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000328xmlNodePtr xmlNewReference(xmlDocPtr doc, const CHAR *name);
329xmlNodePtr xmlCopyNode(xmlNodePtr node, int recursive);
330xmlNodePtr xmlCopyNodeList(xmlNodePtr node);
Daniel Veillard16253641998-10-28 22:58:05 +0000331
332/*
333 * Navigating
334 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000335xmlNodePtr xmlGetLastChild(xmlNodePtr parent);
336int xmlNodeIsText(xmlNodePtr node);
Daniel Veillard16253641998-10-28 22:58:05 +0000337
338/*
339 * Changing the structure
340 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000341xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur);
342void xmlUnlinkNode(xmlNodePtr cur);
Daniel Veillard16253641998-10-28 22:58:05 +0000343
Daniel Veillard1e346af1999-02-22 10:33:01 +0000344xmlNodePtr xmlTextMerge(xmlNodePtr first, xmlNodePtr second);
345void xmlTextConcat(xmlNodePtr node, const CHAR *content, int len);
Daniel Veillard16253641998-10-28 22:58:05 +0000346
Daniel Veillard1e346af1999-02-22 10:33:01 +0000347void xmlFreeNodeList(xmlNodePtr cur);
348void xmlFreeNode(xmlNodePtr cur);
Daniel Veillard16253641998-10-28 22:58:05 +0000349
350/*
351 * Namespaces
352 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000353xmlNsPtr xmlSearchNs(xmlDocPtr doc, xmlNodePtr node,
Daniel Veillard260a68f1998-08-13 03:39:55 +0000354 const CHAR *nameSpace);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000355xmlNsPtr xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node,
Daniel Veillard260a68f1998-08-13 03:39:55 +0000356 const CHAR *href);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000357void xmlSetNs(xmlNodePtr node, xmlNsPtr ns);
358xmlNsPtr xmlCopyNamespace(xmlNsPtr cur);
359xmlNsPtr xmlCopyNamespaceList(xmlNsPtr cur);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000360
Daniel Veillard16253641998-10-28 22:58:05 +0000361/*
362 * Changing the content.
363 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000364xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name,
Daniel Veillard16253641998-10-28 22:58:05 +0000365 const CHAR *value);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000366CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name);
367xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value);
368xmlNodePtr xmlStringLenGetNodeList(xmlDocPtr doc, const CHAR *value,
Daniel Veillard16253641998-10-28 22:58:05 +0000369 int len);
Daniel Veillard1e346af1999-02-22 10:33:01 +0000370CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine);
371void xmlNodeSetContent(xmlNodePtr cur, const CHAR *content);
372void xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len);
373void xmlNodeAddContent(xmlNodePtr cur, const CHAR *content);
374void xmlNodeAddContentLen(xmlNodePtr cur, const CHAR *content, int len);
375CHAR *xmlNodeGetContent(xmlNodePtr cur);
Daniel Veillard16253641998-10-28 22:58:05 +0000376
377/*
378 * Internal, don't use
379 */
Daniel Veillard5099ae81999-04-21 20:12:07 +0000380void xmlBufferWriteCHAR(xmlBufferPtr buf, const CHAR *string);
381void xmlBufferWriteChar(xmlBufferPtr buf, const char *string);
Daniel Veillard011b63c1999-06-02 17:44:04 +0000382void xmlBufferWriteQuotedString(xmlBufferPtr buf, const CHAR *string);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000383
Daniel Veillard16253641998-10-28 22:58:05 +0000384/*
385 * Saving
386 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000387void xmlDocDumpMemory(xmlDocPtr cur, CHAR**mem, int *size);
388void xmlDocDump(FILE *f, xmlDocPtr cur);
Daniel Veillard151b1b01998-09-23 00:49:46 +0000389int xmlSaveFile(const char *filename, xmlDocPtr cur);
390
Daniel Veillard16253641998-10-28 22:58:05 +0000391/*
392 * Compression
393 */
Daniel Veillard1e346af1999-02-22 10:33:01 +0000394int xmlGetDocCompressMode (xmlDocPtr doc);
395void xmlSetDocCompressMode (xmlDocPtr doc, int mode);
396int xmlGetCompressMode(void);
397void xmlSetCompressMode(int mode);
Daniel Veillard260a68f1998-08-13 03:39:55 +0000398
399#ifdef __cplusplus
400}
401#endif
402
403#endif /* __XML_TREE_H__ */
404