blob: 648817d0473c0b20cbe2c6f79ff0bf1e8ca09c36 [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 *
7 * Daniel.Veillard@w3.org
8 *
9 * 14 Nov 2000 ht - added redefinition of xmlBufferWriteChar for VMS
10 *
11 */
12
13#ifndef __XML_TREE_H__
14#define __XML_TREE_H__
15
16#include <stdio.h>
17#include <libxml/xmlversion.h>
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
23#define XML_XML_NAMESPACE \
24 (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
25
26/*
27 * 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/
31 *
32 * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
33 * be deprecated to use an XML_DTD_NODE.
34 */
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,
47 XML_NOTATION_NODE= 12,
48 XML_HTML_DOCUMENT_NODE= 13,
49 XML_DTD_NODE= 14,
50 XML_ELEMENT_DECL= 15,
51 XML_ATTRIBUTE_DECL= 16,
52 XML_ENTITY_DECL= 17,
53 XML_NAMESPACE_DECL= 18,
54 XML_XINCLUDE_START= 19,
55 XML_XINCLUDE_END= 20
56#ifdef LIBXML_SGML_ENABLED
57 ,XML_SGML_DOCUMENT_NODE= 21
58#endif
59} xmlElementType;
60
61/*
62 * Size of an internal character representation.
63 *
64 * 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.
67 */
68
69typedef unsigned char xmlChar;
70
71#ifndef WIN32
72#ifndef CHAR
73#define CHAR xmlChar
74#endif
75#endif
76
77#define BAD_CAST (xmlChar *)
78
79/*
80 * a DTD Notation definition
81 */
82
83typedef struct _xmlNotation xmlNotation;
84typedef xmlNotation *xmlNotationPtr;
85struct _xmlNotation {
86 const xmlChar *name; /* Notation name */
87 const xmlChar *PublicID; /* Public identifier, if any */
88 const xmlChar *SystemID; /* System identifier, if any */
89};
90
91/*
92 * a DTD Attribute definition
93 */
94
95typedef 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;
107
108typedef enum {
109 XML_ATTRIBUTE_NONE = 1,
110 XML_ATTRIBUTE_REQUIRED,
111 XML_ATTRIBUTE_IMPLIED,
112 XML_ATTRIBUTE_FIXED
113} xmlAttributeDefault;
114
115typedef struct _xmlEnumeration xmlEnumeration;
116typedef xmlEnumeration *xmlEnumerationPtr;
117struct _xmlEnumeration {
118 struct _xmlEnumeration *next; /* next one */
119 const xmlChar *name; /* Enumeration name */
120};
121
122typedef struct _xmlAttribute xmlAttribute;
123typedef xmlAttribute *xmlAttributePtr;
124struct _xmlAttribute {
125#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 */
144};
145
146/*
147 * a DTD Element definition.
148 */
149typedef enum {
150 XML_ELEMENT_CONTENT_PCDATA = 1,
151 XML_ELEMENT_CONTENT_ELEMENT,
152 XML_ELEMENT_CONTENT_SEQ,
153 XML_ELEMENT_CONTENT_OR
154} xmlElementContentType;
155
156typedef enum {
157 XML_ELEMENT_CONTENT_ONCE = 1,
158 XML_ELEMENT_CONTENT_OPT,
159 XML_ELEMENT_CONTENT_MULT,
160 XML_ELEMENT_CONTENT_PLUS
161} xmlElementContentOccur;
162
163typedef struct _xmlElementContent xmlElementContent;
164typedef xmlElementContent *xmlElementContentPtr;
165struct _xmlElementContent {
166 xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
167 xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
168 const xmlChar *name; /* Element name */
169 struct _xmlElementContent *c1; /* first child */
170 struct _xmlElementContent *c2; /* second child */
171};
172
173typedef enum {
174 XML_ELEMENT_TYPE_EMPTY = 1,
175 XML_ELEMENT_TYPE_ANY,
176 XML_ELEMENT_TYPE_MIXED,
177 XML_ELEMENT_TYPE_ELEMENT
178} xmlElementTypeVal;
179
180typedef struct _xmlElement xmlElement;
181typedef xmlElement *xmlElementPtr;
182struct _xmlElement {
183#ifndef XML_WITHOUT_CORBA
184 void *_private; /* for Corba, must be first ! */
185#endif
186 xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */
187 const xmlChar *name; /* Element name */
188 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 */
196 xmlElementContentPtr content; /* the allowed element content */
197 xmlAttributePtr attributes; /* List of the declared attributes */
198 const xmlChar *prefix; /* the namespace prefix if any */
199};
200
201/*
202 * An XML namespace.
203 * Note that prefix == NULL is valid, it defines the default namespace
204 * within the subtree (until overriden).
205 *
206 * XML_GLOBAL_NAMESPACE is now deprecated for good
207 * xmlNsType is unified with xmlElementType
208 */
209
210#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
211typedef xmlElementType xmlNsType;
212
213typedef struct _xmlNs xmlNs;
214typedef xmlNs *xmlNsPtr;
215struct _xmlNs {
216 struct _xmlNs *next; /* next Ns link for this node */
217 xmlNsType type; /* global or local */
218 const xmlChar *href; /* URL for the namespace */
219 const xmlChar *prefix; /* prefix for the namespace */
220};
221
222/*
223 * An XML DtD, as defined by <!DOCTYPE.
224 */
225typedef struct _xmlDtd xmlDtd;
226typedef xmlDtd *xmlDtdPtr;
227struct _xmlDtd {
228#ifndef XML_WITHOUT_CORBA
229 void *_private; /* for Corba, must be first ! */
230#endif
231 xmlElementType type; /* XML_DTD_NODE, must be second ! */
232 const xmlChar *name; /* Name of the DTD */
233 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 */
241 void *notations; /* Hash table for notations if any */
242 void *elements; /* Hash table for elements if any */
243 void *attributes; /* Hash table for attributes if any */
244 void *entities; /* Hash table for entities if any */
245 const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */
246 const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
247 void *pentities; /* Hash table for param entities if any */
248};
249
250/*
251 * A attribute of an XML node.
252 */
253typedef struct _xmlAttr xmlAttr;
254typedef xmlAttr *xmlAttrPtr;
255struct _xmlAttr {
256#ifndef XML_WITHOUT_CORBA
257 void *_private; /* for Corba, must be first ! */
258#endif
259 xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */
260 const xmlChar *name; /* the name of the property */
261 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 */
267 xmlNs *ns; /* pointer to the associated namespace */
268 xmlAttributeType atype; /* the attribute type if validating */
269};
270
271/*
272 * An XML ID instance.
273 */
274
275typedef struct _xmlID xmlID;
276typedef xmlID *xmlIDPtr;
277struct _xmlID {
278 struct _xmlID *next; /* next ID */
279 const xmlChar *value; /* The ID name */
280 xmlAttrPtr attr; /* The attribut holding it */
281};
282
283/*
284 * An XML IDREF instance.
285 */
286
287typedef struct _xmlRef xmlRef;
288typedef xmlRef *xmlRefPtr;
289struct _xmlRef {
290 struct _xmlRef *next; /* next Ref */
291 const xmlChar *value; /* The Ref name */
292 xmlAttrPtr attr; /* The attribut holding it */
293};
294
295/*
296 * A buffer structure
297 */
298
299typedef enum {
300 XML_BUFFER_ALLOC_DOUBLEIT,
301 XML_BUFFER_ALLOC_EXACT
302} xmlBufferAllocationScheme;
303
304typedef struct _xmlBuffer xmlBuffer;
305typedef xmlBuffer *xmlBufferPtr;
306struct _xmlBuffer {
307 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 */
311};
312
313/*
314 * A node in an XML tree.
315 */
316typedef struct _xmlNode xmlNode;
317typedef xmlNode *xmlNodePtr;
318struct _xmlNode {
319#ifndef XML_WITHOUT_CORBA
320 void *_private; /* for Corba, must be first ! */
321#endif
322 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 */
326 struct _xmlNode *parent; /* child->parent link */
327 struct _xmlNode *next; /* next sibling link */
328 struct _xmlNode *prev; /* previous sibling link */
329 struct _xmlDoc *doc; /* the containing document */
330 xmlNs *ns; /* pointer to the associated namespace */
331#ifndef XML_USE_BUFFER_CONTENT
332 xmlChar *content; /* the content */
333#else
334 xmlBufferPtr content; /* the content in a buffer */
335#endif
336
337 /* End of common part */
338 struct _xmlAttr *properties;/* properties list */
339 xmlNs *nsDef; /* namespace definitions on this node */
340};
341
342/*
343 * An XML document.
344 */
345typedef struct _xmlDoc xmlDoc;
346typedef xmlDoc *xmlDocPtr;
347struct _xmlDoc {
348#ifndef XML_WITHOUT_CORBA
349 void *_private; /* for Corba, must be first ! */
350#endif
351 xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
352 char *name; /* name/filename/URI of the document */
353 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 */
361 int compression;/* level of zlib compression */
362 int standalone; /* standalone document (no external refs) */
363 struct _xmlDtd *intSubset; /* the document internal subset */
364 struct _xmlDtd *extSubset; /* the document external subset */
365 struct _xmlNs *oldNs; /* Global namespace, the old way */
366 const xmlChar *version; /* the XML version string */
367 const xmlChar *encoding; /* external initial encoding, if any */
368 void *ids; /* Hash table for ID attributes if any */
369 void *refs; /* Hash table for IDREFs attributes if any */
370 const xmlChar *URL; /* The URI for that document */
371 int charset; /* encoding of the in-memory content
372 actually an xmlCharEncoding */
373};
374
375/*
376 * Compatibility naming layer with libxml1
377 */
378#ifndef xmlChildrenNode
379#define xmlChildrenNode children
380#define xmlRootNode children
381#endif
382
383/*
384 * Variables.
385 */
386LIBXML_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> */
391
392/*
393 * Handling Buffers.
394 */
395
396xmlBufferPtr xmlBufferCreate (void);
397xmlBufferPtr xmlBufferCreateSize (size_t size);
398void xmlBufferFree (xmlBufferPtr buf);
399int xmlBufferDump (FILE *file,
400 xmlBufferPtr buf);
401void xmlBufferAdd (xmlBufferPtr buf,
402 const xmlChar *str,
403 int len);
404void xmlBufferAddHead (xmlBufferPtr buf,
405 const xmlChar *str,
406 int len);
407void xmlBufferCat (xmlBufferPtr buf,
408 const xmlChar *str);
409void xmlBufferCCat (xmlBufferPtr buf,
410 const char *str);
411int xmlBufferShrink (xmlBufferPtr buf,
412 unsigned int len);
413int xmlBufferGrow (xmlBufferPtr buf,
414 unsigned int len);
415void xmlBufferEmpty (xmlBufferPtr buf);
416const xmlChar* xmlBufferContent (const xmlBufferPtr buf);
417int xmlBufferUse (const xmlBufferPtr buf);
418void xmlBufferSetAllocationScheme(xmlBufferPtr buf,
419 xmlBufferAllocationScheme scheme);
420int xmlBufferLength (const xmlBufferPtr buf);
421
422/*
423 * Creating/freeing new structures
424 */
425xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc,
426 const xmlChar *name,
427 const xmlChar *ExternalID,
428 const xmlChar *SystemID);
429xmlDtdPtr xmlNewDtd (xmlDocPtr doc,
430 const xmlChar *name,
431 const xmlChar *ExternalID,
432 const xmlChar *SystemID);
433xmlDtdPtr xmlGetIntSubset (xmlDocPtr doc);
434void xmlFreeDtd (xmlDtdPtr cur);
435xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc,
436 const xmlChar *href,
437 const xmlChar *prefix);
438xmlNsPtr xmlNewNs (xmlNodePtr node,
439 const xmlChar *href,
440 const xmlChar *prefix);
441void xmlFreeNs (xmlNsPtr cur);
442xmlDocPtr xmlNewDoc (const xmlChar *version);
443void xmlFreeDoc (xmlDocPtr cur);
444xmlAttrPtr xmlNewDocProp (xmlDocPtr doc,
445 const xmlChar *name,
446 const xmlChar *value);
447xmlAttrPtr xmlNewProp (xmlNodePtr node,
448 const xmlChar *name,
449 const xmlChar *value);
450xmlAttrPtr xmlNewNsProp (xmlNodePtr node,
451 xmlNsPtr ns,
452 const xmlChar *name,
453 const xmlChar *value);
454void 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);
463
464/*
465 * Creating new nodes
466 */
467xmlNodePtr xmlNewDocNode (xmlDocPtr doc,
468 xmlNsPtr ns,
469 const xmlChar *name,
470 const xmlChar *content);
471xmlNodePtr xmlNewDocRawNode (xmlDocPtr doc,
472 xmlNsPtr ns,
473 const xmlChar *name,
474 const xmlChar *content);
475xmlNodePtr xmlNewNode (xmlNsPtr ns,
476 const xmlChar *name);
477xmlNodePtr xmlNewChild (xmlNodePtr parent,
478 xmlNsPtr ns,
479 const xmlChar *name,
480 const xmlChar *content);
481xmlNodePtr xmlNewTextChild (xmlNodePtr parent,
482 xmlNsPtr ns,
483 const xmlChar *name,
484 const xmlChar *content);
485xmlNodePtr xmlNewDocText (xmlDocPtr doc,
486 const xmlChar *content);
487xmlNodePtr xmlNewText (const xmlChar *content);
488xmlNodePtr xmlNewPI (const xmlChar *name,
489 const xmlChar *content);
490xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc,
491 const xmlChar *content,
492 int len);
493xmlNodePtr xmlNewTextLen (const xmlChar *content,
494 int len);
495xmlNodePtr xmlNewDocComment (xmlDocPtr doc,
496 const xmlChar *content);
497xmlNodePtr xmlNewComment (const xmlChar *content);
498xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc,
499 const xmlChar *content,
500 int len);
501xmlNodePtr xmlNewCharRef (xmlDocPtr doc,
502 const xmlChar *name);
503xmlNodePtr xmlNewReference (xmlDocPtr doc,
504 const xmlChar *name);
505xmlNodePtr xmlCopyNode (xmlNodePtr node,
506 int recursive);
507xmlNodePtr xmlCopyNodeList (xmlNodePtr node);
508xmlNodePtr xmlNewDocFragment (xmlDocPtr doc);
509
510/*
511 * Navigating
512 */
513xmlNodePtr xmlDocGetRootElement (xmlDocPtr doc);
514xmlNodePtr xmlGetLastChild (xmlNodePtr parent);
515int xmlNodeIsText (xmlNodePtr node);
516int xmlIsBlankNode (xmlNodePtr node);
517
518/*
519 * Changing the structure
520 */
521xmlNodePtr xmlDocSetRootElement (xmlDocPtr doc,
522 xmlNodePtr root);
523void xmlNodeSetName (xmlNodePtr cur,
524 const xmlChar *name);
525xmlNodePtr xmlAddChild (xmlNodePtr parent,
526 xmlNodePtr cur);
527xmlNodePtr xmlAddChildList (xmlNodePtr parent,
528 xmlNodePtr cur);
529xmlNodePtr xmlReplaceNode (xmlNodePtr old,
530 xmlNodePtr cur);
531xmlNodePtr xmlAddSibling (xmlNodePtr cur,
532 xmlNodePtr elem);
533xmlNodePtr xmlAddPrevSibling (xmlNodePtr cur,
534 xmlNodePtr elem);
535xmlNodePtr xmlAddNextSibling (xmlNodePtr cur,
536 xmlNodePtr elem);
537void xmlUnlinkNode (xmlNodePtr cur);
538xmlNodePtr xmlTextMerge (xmlNodePtr first,
539 xmlNodePtr second);
540void xmlTextConcat (xmlNodePtr node,
541 const xmlChar *content,
542 int len);
543void xmlFreeNodeList (xmlNodePtr cur);
544void xmlFreeNode (xmlNodePtr cur);
545void xmlSetTreeDoc (xmlNodePtr tree,
546 xmlDocPtr doc);
547void xmlSetListDoc (xmlNodePtr list,
548 xmlDocPtr doc);
549
550/*
551 * Namespaces
552 */
553xmlNsPtr xmlSearchNs (xmlDocPtr doc,
554 xmlNodePtr node,
555 const xmlChar *nameSpace);
556xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc,
557 xmlNodePtr node,
558 const xmlChar *href);
559xmlNsPtr * xmlGetNsList (xmlDocPtr doc,
560 xmlNodePtr node);
561void xmlSetNs (xmlNodePtr node,
562 xmlNsPtr ns);
563xmlNsPtr xmlCopyNamespace (xmlNsPtr cur);
564xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur);
565
566/*
567 * Changing the content.
568 */
569xmlAttrPtr xmlSetProp (xmlNodePtr node,
570 const xmlChar *name,
571 const xmlChar *value);
572xmlChar * xmlGetProp (xmlNodePtr node,
573 const xmlChar *name);
574xmlAttrPtr xmlHasProp (xmlNodePtr node,
575 const xmlChar *name);
576xmlAttrPtr xmlSetNsProp (xmlNodePtr node,
577 xmlNsPtr ns,
578 const xmlChar *name,
579 const xmlChar *value);
580xmlChar * xmlGetNsProp (xmlNodePtr node,
581 const xmlChar *name,
582 const xmlChar *nameSpace);
583xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc,
584 const xmlChar *value);
585xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc,
586 const xmlChar *value,
587 int len);
588xmlChar * xmlNodeListGetString (xmlDocPtr doc,
589 xmlNodePtr list,
590 int inLine);
591xmlChar * xmlNodeListGetRawString (xmlDocPtr doc,
592 xmlNodePtr list,
593 int inLine);
594void xmlNodeSetContent (xmlNodePtr cur,
595 const xmlChar *content);
596void xmlNodeSetContentLen (xmlNodePtr cur,
597 const xmlChar *content,
598 int len);
599void xmlNodeAddContent (xmlNodePtr cur,
600 const xmlChar *content);
601void xmlNodeAddContentLen (xmlNodePtr cur,
602 const xmlChar *content,
603 int len);
604xmlChar * xmlNodeGetContent (xmlNodePtr cur);
605xmlChar * xmlNodeGetLang (xmlNodePtr cur);
606void xmlNodeSetLang (xmlNodePtr cur,
607 const xmlChar *lang);
608int xmlNodeGetSpacePreserve (xmlNodePtr cur);
609void xmlNodeSetSpacePreserve (xmlNodePtr cur, int
610 val);
611xmlChar * xmlNodeGetBase (xmlDocPtr doc,
612 xmlNodePtr cur);
613void xmlNodeSetBase (xmlNodePtr cur,
614 xmlChar *uri);
615
616/*
617 * Removing content.
618 */
619int xmlRemoveProp (xmlAttrPtr attr);
620int xmlRemoveNode (xmlNodePtr node); /* TODO */
621
622/*
623 * Internal, don't use
624 */
625#ifdef VMS
626void xmlBufferWriteXmlCHAR (xmlBufferPtr buf,
627 const xmlChar *string);
628#define xmlBufferWriteCHAR xmlBufferWriteXmlCHAR
629#else
630void xmlBufferWriteCHAR (xmlBufferPtr buf,
631 const xmlChar *string);
632#endif
633void xmlBufferWriteChar (xmlBufferPtr buf,
634 const char *string);
635void xmlBufferWriteQuotedString(xmlBufferPtr buf,
636 const xmlChar *string);
637
638/*
639 * Namespace handling
640 */
641int xmlReconciliateNs (xmlDocPtr doc,
642 xmlNodePtr tree);
643
644/*
645 * Saving
646 */
647void xmlDocDumpFormatMemory (xmlDocPtr cur,
648 xmlChar**mem,
649 int *size,
650 int format);
651void xmlDocDumpMemory (xmlDocPtr cur,
652 xmlChar**mem,
653 int *size);
654void xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
655 xmlChar **doc_txt_ptr,
656 int * doc_txt_len,
657 const char *txt_encoding);
658void xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
659 xmlChar **doc_txt_ptr,
660 int * doc_txt_len,
661 const char *txt_encoding,
662 int format);
663int xmlDocDump (FILE *f,
664 xmlDocPtr cur);
665void xmlElemDump (FILE *f,
666 xmlDocPtr doc,
667 xmlNodePtr cur);
668int xmlSaveFile (const char *filename,
669 xmlDocPtr cur);
670void xmlNodeDump (xmlBufferPtr buf,
671 xmlDocPtr doc,
672 xmlNodePtr cur,
673 int level,
674 int format);
675
676/* 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
687/*
688 * Compression
689 */
690int xmlGetDocCompressMode (xmlDocPtr doc);
691void xmlSetDocCompressMode (xmlDocPtr doc,
692 int mode);
693int xmlGetCompressMode (void);
694void xmlSetCompressMode (int mode);
695
696#ifdef __cplusplus
697}
698#endif
699
700#endif /* __XML_TREE_H__ */
701