mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-02-21 17:57:22 +03:00
388 lines
12 KiB
C
388 lines
12 KiB
C
/*
|
|
* 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__ */
|
|
|