home *** CD-ROM | disk | FTP | other *** search
- /*
- * tree.h : describes the structures found in an tree resulting
- * from an XML parsing.
- *
- * See Copyright for the status of this software.
- *
- * Daniel.Veillard@w3.org
- */
-
- #ifndef __XML_TREE_H__
- #define __XML_TREE_H__
-
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #include <stdio.h>
-
- /*
- * The different element types carried by an XML tree
- *
- * NOTE: This is synchronized with DOM Level1 values
- * See http://www.w3.org/TR/REC-DOM-Level-1/
- */
- typedef enum {
- XML_ELEMENT_NODE= 1,
- XML_ATTRIBUTE_NODE= 2,
- XML_TEXT_NODE= 3,
- XML_CDATA_SECTION_NODE= 4,
- XML_ENTITY_REF_NODE= 5,
- XML_ENTITY_NODE= 6,
- XML_PI_NODE= 7,
- XML_COMMENT_NODE= 8,
- XML_DOCUMENT_NODE= 9,
- XML_DOCUMENT_TYPE_NODE= 10,
- XML_DOCUMENT_FRAG_NODE= 11,
- XML_NOTATION_NODE= 12
- } xmlElementType;
-
- /*
- * Size of an internal character representation.
- *
- * Currently we use 8bit chars internal representation for memory efficiency,
- * but the parser is not tied to that, just define UNICODE to switch to
- * a 16 bits internal representation. Note that with 8 bits wide
- * CHARs one can still use UTF-8 to handle correctly non ISO-Latin
- * input.
- */
- #ifdef UNICODE
- typedef unsigned short CHAR;
- #else
- typedef unsigned char CHAR;
- #endif
-
- /*
- * a DTD Notation definition
- */
-
- typedef struct xmlNotation {
- const CHAR *name; /* Notation name */
- const CHAR *PublicID; /* Public identifier, if any */
- const CHAR *SystemID; /* System identifier, if any */
- } xmlNotation;
- typedef xmlNotation *xmlNotationPtr;
-
- /*
- * a DTD Attribute definition
- */
-
- typedef enum {
- XML_ATTRIBUTE_CDATA = 1,
- XML_ATTRIBUTE_ID,
- XML_ATTRIBUTE_IDREF ,
- XML_ATTRIBUTE_IDREFS,
- XML_ATTRIBUTE_ENTITY,
- XML_ATTRIBUTE_ENTITIES,
- XML_ATTRIBUTE_NMTOKEN,
- XML_ATTRIBUTE_NMTOKENS,
- XML_ATTRIBUTE_ENUMERATION,
- XML_ATTRIBUTE_NOTATION
- } xmlAttributeType;
-
- typedef enum {
- XML_ATTRIBUTE_NONE = 1,
- XML_ATTRIBUTE_REQUIRED,
- XML_ATTRIBUTE_IMPLIED,
- XML_ATTRIBUTE_FIXED
- } xmlAttributeDefault;
-
- typedef struct xmlEnumeration {
- struct xmlEnumeration *next; /* next one */
- const CHAR *name; /* Enumeration name */
- } xmlEnumeration;
- typedef xmlEnumeration *xmlEnumerationPtr;
-
- typedef struct xmlAttribute {
- const CHAR *elem; /* Element holding the attribute */
- const CHAR *name; /* Attribute name */
- xmlAttributeType type; /* The type */
- xmlAttributeDefault def; /* the default */
- const CHAR *defaultValue;/* or the default value */
- xmlEnumerationPtr tree; /* or the enumeration tree if any */
- } xmlAttribute;
- typedef xmlAttribute *xmlAttributePtr;
-
- /*
- * a DTD Element definition.
- */
- typedef enum {
- XML_ELEMENT_CONTENT_PCDATA = 1,
- XML_ELEMENT_CONTENT_ELEMENT,
- XML_ELEMENT_CONTENT_SEQ,
- XML_ELEMENT_CONTENT_OR
- } xmlElementContentType;
-
- typedef enum {
- XML_ELEMENT_CONTENT_ONCE = 1,
- XML_ELEMENT_CONTENT_OPT,
- XML_ELEMENT_CONTENT_MULT,
- XML_ELEMENT_CONTENT_PLUS
- } xmlElementContentOccur;
-
- typedef struct xmlElementContent {
- xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
- xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
- const CHAR *name; /* Element name */
- struct xmlElementContent *c1; /* first child */
- struct xmlElementContent *c2; /* second child */
- } xmlElementContent;
- typedef xmlElementContent *xmlElementContentPtr;
-
- typedef enum {
- XML_ELEMENT_TYPE_EMPTY = 1,
- XML_ELEMENT_TYPE_ANY,
- XML_ELEMENT_TYPE_MIXED,
- XML_ELEMENT_TYPE_ELEMENT
- } xmlElementTypeVal;
-
- typedef struct xmlElement {
- const CHAR *name; /* Element name */
- xmlElementTypeVal type; /* The type */
- xmlElementContentPtr content; /* the allowed element content */
- } xmlElement;
- typedef xmlElement *xmlElementPtr;
-
- /*
- * An XML namespace.
- * Note that prefix == NULL is valid, it defines the default namespace
- * within the subtree (until overriden).
- */
-
- typedef enum {
- XML_GLOBAL_NAMESPACE = 1, /* old style global namespace */
- XML_LOCAL_NAMESPACE /* new style local scoping */
- } xmlNsType;
-
- typedef struct xmlNs {
- struct xmlNs *next; /* next Ns link for this node */
- xmlNsType type; /* global or local */
- const CHAR *href; /* URL for the namespace */
- const CHAR *prefix; /* prefix for the namespace */
- } xmlNs;
- typedef xmlNs *xmlNsPtr;
-
- /*
- * An XML DtD, as defined by <!DOCTYPE.
- */
- typedef struct xmlDtd {
- const CHAR *name; /* Name of the DTD */
- const CHAR *ExternalID; /* External identifier for PUBLIC DTD */
- const CHAR *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
- void *notations; /* Hash table for notations if any */
- void *elements; /* Hash table for elements if any */
- void *attributes; /* Hash table for attributes if any */
- void *entities; /* Hash table for entities if any */
- /* struct xmlDtd *next; * next link for this document */
- } xmlDtd;
- typedef xmlDtd *xmlDtdPtr;
-
- /*
- * A attribute of an XML node.
- */
- typedef struct xmlAttr {
- #ifndef XML_WITHOUT_CORBA
- void *_private; /* for Corba, must be first ! */
- void *vepv; /* for Corba, must be next ! */
- #endif
- xmlElementType type; /* XML_ATTRIBUTE_NODE, must be third ! */
- struct xmlNode *node; /* attr->node link */
- struct xmlAttr *next; /* parent->childs link */
- const CHAR *name; /* the name of the property */
- struct xmlNode *val; /* the value of the property */
- } xmlAttr;
- typedef xmlAttr *xmlAttrPtr;
-
- /*
- * A node in an XML tree.
- */
- typedef struct xmlNode {
- #ifndef XML_WITHOUT_CORBA
- void *_private; /* for Corba, must be first ! */
- void *vepv; /* for Corba, must be next ! */
- #endif
- xmlElementType type; /* type number in the DTD, must be third ! */
- struct xmlDoc *doc; /* the containing document */
- struct xmlNode *parent; /* child->parent link */
- struct xmlNode *next; /* next sibling link */
- struct xmlNode *prev; /* previous sibling link */
- struct xmlNode *childs; /* parent->childs link */
- struct xmlNode *last; /* last child link */
- struct xmlAttr *properties; /* properties list */
- const CHAR *name; /* the name of the node, or the entity */
- xmlNs *ns; /* pointer to the associated namespace */
- xmlNs *nsDef; /* namespace definitions on this node */
- CHAR *content; /* the content */
- } _xmlNode;
- typedef _xmlNode xmlNode;
- typedef _xmlNode *xmlNodePtr;
-
- /*
- * An XML document.
- */
- typedef struct xmlDoc {
- #ifndef XML_WITHOUT_CORBA
- void *_private; /* for Corba, must be first ! */
- void *vepv; /* for Corba, must be next ! */
- #endif
- xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
- char *name; /* name/filename/URI of the document */
- const CHAR *version; /* the XML version string */
- const CHAR *encoding; /* encoding, if any */
- int compression;/* level of zlib compression */
- int standalone; /* standalone document (no external refs) */
- struct xmlDtd *intSubset; /* the document internal subset */
- struct xmlDtd *extSubset; /* the document external subset */
- struct xmlNs *oldNs; /* Global namespace, the old way */
- struct xmlNode *root; /* the document tree */
- } _xmlDoc;
- typedef _xmlDoc xmlDoc;
- typedef xmlDoc *xmlDocPtr;
-
- /*
- * A buffer structure
- */
-
- typedef struct xmlBuffer {
- CHAR *content; /* The buffer content UTF8 */
- unsigned int use; /* The buffer size used */
- unsigned int size; /* The buffer size */
- } _xmlBuffer;
- typedef _xmlBuffer xmlBuffer;
- typedef xmlBuffer *xmlBufferPtr;
-
- /*
- * Variables.
- */
- extern xmlNsPtr baseDTD;
- extern int oldXMLWDcompatibility;/* maintain compatibility with old WD */
- extern int xmlIndentTreeOutput; /* try to indent the tree dumps */
-
- /*
- * Handling Buffers.
- */
-
- xmlBufferPtr xmlBufferCreate(void);
- void xmlBufferFree(xmlBufferPtr buf);
- int xmlBufferDump(FILE *file, xmlBufferPtr buf);
- void xmlBufferAdd(xmlBufferPtr buf, const CHAR *str, int len);
- void xmlBufferCat(xmlBufferPtr buf, const CHAR *str);
- void xmlBufferCCat(xmlBufferPtr buf, const char *str);
-
- /*
- * Creating/freeing new structures
- */
- xmlDtdPtr xmlCreateIntSubset(xmlDocPtr doc, const CHAR *name,
- const CHAR *ExternalID, const CHAR *SystemID);
- xmlDtdPtr xmlNewDtd(xmlDocPtr doc, const CHAR *name,
- const CHAR *ExternalID, const CHAR *SystemID);
- void xmlFreeDtd(xmlDtdPtr cur);
- xmlNsPtr xmlNewGlobalNs(xmlDocPtr doc, const CHAR *href, const CHAR *prefix);
- xmlNsPtr xmlNewNs(xmlNodePtr node, const CHAR *href, const CHAR *prefix);
- void xmlFreeNs(xmlNsPtr cur);
- xmlDocPtr xmlNewDoc(const CHAR *version);
- void xmlFreeDoc(xmlDocPtr cur);
- xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name,
- const CHAR *value);
- xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name,
- const CHAR *value);
- void xmlFreePropList(xmlAttrPtr cur);
- void xmlFreeProp(xmlAttrPtr cur);
- xmlAttrPtr xmlCopyProp(xmlAttrPtr cur);
- xmlAttrPtr xmlCopyPropList(xmlAttrPtr cur);
- xmlDtdPtr xmlCopyDtd(xmlDtdPtr dtd);
- xmlDocPtr xmlCopyDoc(xmlDocPtr doc, int recursive);
-
- /*
- * Creating new nodes
- */
- xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
- const CHAR *name, CHAR *content);
- xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name);
- xmlNodePtr xmlNewChild(xmlNodePtr parent, xmlNsPtr ns,
- const CHAR *name, CHAR *content);
- xmlNodePtr xmlNewDocText(xmlDocPtr doc, const CHAR *content);
- xmlNodePtr xmlNewText(const CHAR *content);
- xmlNodePtr xmlNewDocTextLen(xmlDocPtr doc, const CHAR *content, int len);
- xmlNodePtr xmlNewTextLen(const CHAR *content, int len);
- xmlNodePtr xmlNewDocComment(xmlDocPtr doc, const CHAR *content);
- xmlNodePtr xmlNewComment(const CHAR *content);
- xmlNodePtr xmlNewReference(xmlDocPtr doc, const CHAR *name);
- xmlNodePtr xmlCopyNode(xmlNodePtr node, int recursive);
- xmlNodePtr xmlCopyNodeList(xmlNodePtr node);
-
- /*
- * Navigating
- */
- xmlNodePtr xmlGetLastChild(xmlNodePtr parent);
- int xmlNodeIsText(xmlNodePtr node);
-
- /*
- * Changing the structure
- */
- xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur);
- void xmlUnlinkNode(xmlNodePtr cur);
-
- xmlNodePtr xmlTextMerge(xmlNodePtr first, xmlNodePtr second);
- void xmlTextConcat(xmlNodePtr node, const CHAR *content, int len);
-
- void xmlFreeNodeList(xmlNodePtr cur);
- void xmlFreeNode(xmlNodePtr cur);
-
- /*
- * Namespaces
- */
- xmlNsPtr xmlSearchNs(xmlDocPtr doc, xmlNodePtr node,
- const CHAR *nameSpace);
- xmlNsPtr xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node,
- const CHAR *href);
- void xmlSetNs(xmlNodePtr node, xmlNsPtr ns);
- xmlNsPtr xmlCopyNamespace(xmlNsPtr cur);
- xmlNsPtr xmlCopyNamespaceList(xmlNsPtr cur);
-
- /*
- * Changing the content.
- */
- xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name,
- const CHAR *value);
- CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name);
- xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value);
- xmlNodePtr xmlStringLenGetNodeList(xmlDocPtr doc, const CHAR *value,
- int len);
- CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine);
- void xmlNodeSetContent(xmlNodePtr cur, const CHAR *content);
- void xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len);
- void xmlNodeAddContent(xmlNodePtr cur, const CHAR *content);
- void xmlNodeAddContentLen(xmlNodePtr cur, const CHAR *content, int len);
- CHAR *xmlNodeGetContent(xmlNodePtr cur);
-
- /*
- * Internal, don't use
- */
- void xmlBufferWriteCHAR(xmlBufferPtr buf, const CHAR *string);
- void xmlBufferWriteChar(xmlBufferPtr buf, const char *string);
- void xmlBufferWriteQuotedString(xmlBufferPtr buf, const CHAR *string);
-
- /*
- * Saving
- */
- void xmlDocDumpMemory(xmlDocPtr cur, CHAR**mem, int *size);
- void xmlDocDump(FILE *f, xmlDocPtr cur);
- int xmlSaveFile(const char *filename, xmlDocPtr cur);
-
- /*
- * Compression
- */
- int xmlGetDocCompressMode (xmlDocPtr doc);
- void xmlSetDocCompressMode (xmlDocPtr doc, int mode);
- int xmlGetCompressMode(void);
- void xmlSetCompressMode(int mode);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif /* __XML_TREE_H__ */
-
-