1998-08-13 07:39:55 +04:00
/*
* tree . h : describes the structures found in an tree resulting
* from an XML parsing .
*
* See Copyright for the status of this software .
*
1999-01-17 22:11:59 +03:00
* Daniel . Veillard @ w3 . org
1998-08-13 07:39:55 +04:00
*/
# ifndef __XML_TREE_H__
# define __XML_TREE_H__
# ifdef __cplusplus
extern " C " {
# endif
1999-01-17 22:11:59 +03:00
# include <stdio.h>
1998-08-13 07:39:55 +04:00
/*
1998-10-27 09:21:04 +03:00
* 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 ;
/*
1998-11-01 22:34:31 +03:00
* Size of an internal character representation .
*
* Currently we use 8 bit 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 .
1998-08-13 07:39:55 +04:00
*/
# ifdef UNICODE
typedef unsigned short CHAR ;
# else
typedef unsigned char CHAR ;
# endif
/*
* a DTD Notation definition
* TODO ! ! ! !
*/
/*
* a DTD Attribute definition
* TODO ! ! ! !
*/
1999-01-17 22:11:59 +03:00
# define XML_ATTRIBUTE_NONE 1
# define XML_ATTRIBUTE_REQUIRED 2
# define XML_ATTRIBUTE_IMPLIED 3
# define XML_ATTRIBUTE_FIXED 4
# define XML_ATTRIBUTE_STRING 1
# define XML_ATTRIBUTE_ID 2
# define XML_ATTRIBUTE_IDREF 3
# define XML_ATTRIBUTE_IDREFS 4
# define XML_ATTRIBUTE_ENTITY 5
# define XML_ATTRIBUTE_ENTITIES 6
# define XML_ATTRIBUTE_NMTOKEN 7
# define XML_ATTRIBUTE_NMTOKENS 8
# define XML_ATTRIBUTE_ENUMERATED 9
1998-08-13 07:39:55 +04:00
/*
* a DTD Element definition .
*/
1999-02-01 15:18:54 +03:00
typedef enum {
XML_ELEMENT_CONTENT_PCDATA = 1 ,
XML_ELEMENT_CONTENT_ELEMENT ,
XML_ELEMENT_CONTENT_SEQ ,
XML_ELEMENT_CONTENT_OR
} xmlElementContentType ;
1999-01-17 22:11:59 +03:00
1999-02-01 15:18:54 +03:00
typedef enum {
XML_ELEMENT_CONTENT_ONCE = 1 ,
XML_ELEMENT_CONTENT_OPT ,
XML_ELEMENT_CONTENT_MULT ,
XML_ELEMENT_CONTENT_PLUS
} xmlElementContentOccur ;
1999-01-17 22:11:59 +03:00
typedef struct xmlElementContent {
1999-02-01 15:18:54 +03:00
xmlElementContentType type ; /* PCDATA, ELEMENT, SEQ or OR */
xmlElementContentOccur ocur ; /* ONCE, OPT, MULT or PLUS */
const CHAR * name ; /* Element name */
1999-01-17 22:11:59 +03:00
struct xmlElementContent * c1 ; /* first child */
struct xmlElementContent * c2 ; /* second child */
} xmlElementContent , * xmlElementContentPtr ;
1999-02-01 15:18:54 +03:00
typedef enum {
XML_ELEMENT_TYPE_EMPTY = 1 ,
XML_ELEMENT_TYPE_ANY ,
XML_ELEMENT_TYPE_MIXED ,
XML_ELEMENT_TYPE_ELEMENT
} xmlElementTypeVal ;
1998-08-13 07:39:55 +04:00
typedef struct xmlElement {
1999-02-01 15:18:54 +03:00
const CHAR * name ; /* Element name */
xmlElementTypeVal type ; /* The type */
1999-01-17 22:11:59 +03:00
xmlElementContentPtr content ; /* the allowed element content */
1998-08-13 07:39:55 +04:00
} xmlElement , * xmlElementPtr ;
/*
* An XML namespace .
* Note that prefix = = NULL is valid , it defines the default namespace
* within the subtree ( until overriden ) .
*/
1999-02-01 15:18:54 +03:00
typedef enum {
XML_GLOBAL_NAMESPACE = 1 , /* old style global namespace */
XML_LOCAL_NAMESPACE /* new style local scoping */
} xmlNsType ;
1998-08-13 07:39:55 +04:00
typedef struct xmlNs {
struct xmlNs * next ; /* next Ns link for this node */
1999-02-01 15:18:54 +03:00
xmlNsType type ; /* global or local */
1998-08-13 07:39:55 +04:00
const CHAR * href ; /* URL for the namespace */
const CHAR * prefix ; /* prefix for the namespace */
} 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 * elements ; /* Hash table for elements if any */
void * entities ; /* Hash table for entities if any */
/* struct xmlDtd *next; * next link for this document */
} xmlDtd , * xmlDtdPtr ;
/*
* A attribute of an XML node .
*/
typedef struct xmlAttr {
1998-10-17 10:47:46 +04:00
# ifndef XML_WITHOUT_CORBA
void * _private ; /* for Corba, must be first ! */
void * vepv ; /* for Corba, must be next ! */
# endif
1998-10-27 09:21:04 +03:00
xmlElementType type ; /* XML_ATTRIBUTE_NODE, must be third ! */
1998-08-13 07:39:55 +04:00
struct xmlNode * node ; /* attr->node link */
struct xmlAttr * next ; /* parent->childs link */
const CHAR * name ; /* the name of the property */
1998-10-27 09:21:04 +03:00
struct xmlNode * val ; /* the value of the property */
1998-08-13 07:39:55 +04:00
} xmlAttr , * xmlAttrPtr ;
/*
* A node in an XML tree .
*/
typedef struct xmlNode {
1998-10-17 10:47:46 +04:00
# ifndef XML_WITHOUT_CORBA
void * _private ; /* for Corba, must be first ! */
void * vepv ; /* for Corba, must be next ! */
# endif
1998-10-27 09:21:04 +03:00
xmlElementType type ; /* type number in the DTD, must be third ! */
1998-10-14 06:36:47 +04:00
struct xmlDoc * doc ; /* the containing document */
1998-08-13 07:39:55 +04:00
struct xmlNode * parent ; /* child->parent link */
struct xmlNode * next ; /* next sibling link */
1998-10-14 06:36:47 +04:00
struct xmlNode * prev ; /* previous sibling link */
1998-08-13 07:39:55 +04:00
struct xmlNode * childs ; /* parent->childs link */
1999-01-17 22:11:59 +03:00
struct xmlNode * last ; /* last child link */
1998-08-13 07:39:55 +04:00
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 , * xmlNodePtr ;
/*
* An XML document .
*/
typedef struct xmlDoc {
1998-10-17 10:47:46 +04:00
# ifndef XML_WITHOUT_CORBA
void * _private ; /* for Corba, must be first ! */
void * vepv ; /* for Corba, must be next ! */
# endif
1998-10-27 09:21:04 +03:00
xmlElementType type ; /* XML_DOCUMENT_NODE, must be second ! */
1998-08-13 07:39:55 +04:00
char * name ; /* name/filename/URI of the document */
const CHAR * version ; /* the XML version string */
const CHAR * encoding ; /* encoding, if any */
1998-09-24 23:15:06 +04:00
int compression ; /* level of zlib compression */
1998-08-13 07:39:55 +04:00
int standalone ; /* standalone document (no external refs) */
1999-01-17 22:11:59 +03:00
struct xmlDtd * intSubset ; /* the document internal subset */
struct xmlDtd * extSubset ; /* the document external subset */
1998-08-13 07:39:55 +04:00
struct xmlNs * oldNs ; /* Global namespace, the old way */
struct xmlNode * root ; /* the document tree */
} xmlDoc , * xmlDocPtr ;
/*
* Variables .
*/
extern xmlNsPtr baseDTD ;
extern int oldXMLWDcompatibility ; /* maintain compatibility with old WD */
extern int xmlIndentTreeOutput ; /* try to indent the tree dumps */
/*
1998-10-29 01:58:05 +03:00
* Creating / freeing new structures
1998-08-13 07:39:55 +04:00
*/
1999-01-17 22:11:59 +03:00
extern xmlDtdPtr xmlCreateIntSubset ( xmlDocPtr doc , const CHAR * name ,
const CHAR * ExternalID , const CHAR * SystemID ) ;
1998-08-13 07:39:55 +04:00
extern xmlDtdPtr xmlNewDtd ( xmlDocPtr doc , const CHAR * name ,
const CHAR * ExternalID , const CHAR * SystemID ) ;
extern void xmlFreeDtd ( xmlDtdPtr cur ) ;
extern xmlNsPtr xmlNewGlobalNs ( xmlDocPtr doc , const CHAR * href , const CHAR * AS ) ;
extern xmlNsPtr xmlNewNs ( xmlNodePtr node , const CHAR * href , const CHAR * AS ) ;
extern void xmlFreeNs ( xmlNsPtr cur ) ;
extern xmlDocPtr xmlNewDoc ( const CHAR * version ) ;
extern void xmlFreeDoc ( xmlDocPtr cur ) ;
1998-10-27 09:21:04 +03:00
extern xmlAttrPtr xmlNewDocProp ( xmlDocPtr doc , const CHAR * name ,
const CHAR * value ) ;
1998-08-13 07:39:55 +04:00
extern xmlAttrPtr xmlNewProp ( xmlNodePtr node , const CHAR * name ,
const CHAR * value ) ;
extern void xmlFreePropList ( xmlAttrPtr cur ) ;
extern void xmlFreeProp ( xmlAttrPtr cur ) ;
1998-11-27 09:39:50 +03:00
extern xmlAttrPtr xmlCopyProp ( xmlAttrPtr cur ) ;
extern xmlAttrPtr xmlCopyPropList ( xmlAttrPtr cur ) ;
extern xmlDtdPtr xmlCopyDtd ( xmlDtdPtr dtd ) ;
extern xmlDocPtr xmlCopyDoc ( xmlDocPtr doc , int recursive ) ;
1998-10-29 01:58:05 +03:00
/*
* Creating new nodes
*/
1998-10-14 06:36:47 +04:00
extern xmlNodePtr xmlNewDocNode ( xmlDocPtr doc , xmlNsPtr ns ,
const CHAR * name , CHAR * content ) ;
1998-10-27 09:21:04 +03:00
extern xmlNodePtr xmlNewNode ( xmlNsPtr ns , const CHAR * name ) ;
1998-10-29 01:58:05 +03:00
extern xmlNodePtr xmlNewChild ( xmlNodePtr parent , xmlNsPtr ns ,
const CHAR * name , CHAR * content ) ;
1998-10-14 06:36:47 +04:00
extern xmlNodePtr xmlNewDocText ( xmlDocPtr doc , const CHAR * content ) ;
1998-08-13 07:39:55 +04:00
extern xmlNodePtr xmlNewText ( const CHAR * content ) ;
1998-10-14 06:36:47 +04:00
extern xmlNodePtr xmlNewDocTextLen ( xmlDocPtr doc , const CHAR * content , int len ) ;
1998-08-13 07:39:55 +04:00
extern xmlNodePtr xmlNewTextLen ( const CHAR * content , int len ) ;
1998-10-14 06:36:47 +04:00
extern xmlNodePtr xmlNewDocComment ( xmlDocPtr doc , CHAR * content ) ;
1998-08-13 07:39:55 +04:00
extern xmlNodePtr xmlNewComment ( CHAR * content ) ;
1998-10-27 09:21:04 +03:00
extern xmlNodePtr xmlNewReference ( xmlDocPtr doc , const CHAR * name ) ;
1998-11-27 09:39:50 +03:00
extern xmlNodePtr xmlCopyNode ( xmlNodePtr node , int recursive ) ;
extern xmlNodePtr xmlCopyNodeList ( xmlNodePtr node ) ;
1998-10-29 01:58:05 +03:00
/*
* Navigating
*/
1998-08-13 07:39:55 +04:00
extern xmlNodePtr xmlGetLastChild ( xmlNodePtr node ) ;
extern int xmlNodeIsText ( xmlNodePtr node ) ;
1998-10-29 01:58:05 +03:00
/*
* Changing the structure
*/
extern xmlNodePtr xmlAddChild ( xmlNodePtr parent , xmlNodePtr cur ) ;
extern void xmlUnlinkNode ( xmlNodePtr cur ) ;
extern xmlNodePtr xmlTextMerge ( xmlNodePtr first , xmlNodePtr second ) ;
1998-08-13 07:39:55 +04:00
extern void xmlTextConcat ( xmlNodePtr node , const CHAR * content , int len ) ;
1998-10-29 01:58:05 +03:00
1998-08-13 07:39:55 +04:00
extern void xmlFreeNodeList ( xmlNodePtr cur ) ;
extern void xmlFreeNode ( xmlNodePtr cur ) ;
1998-10-29 01:58:05 +03:00
/*
* Namespaces
*/
1998-08-13 07:39:55 +04:00
extern xmlNsPtr xmlSearchNs ( xmlDocPtr doc , xmlNodePtr node ,
const CHAR * nameSpace ) ;
extern xmlNsPtr xmlSearchNsByHref ( xmlDocPtr doc , xmlNodePtr node ,
const CHAR * href ) ;
extern void xmlSetNs ( xmlNodePtr node , xmlNsPtr ns ) ;
1998-11-27 09:39:50 +03:00
extern xmlNsPtr xmlCopyNamespace ( xmlNsPtr cur ) ;
extern xmlNsPtr xmlCopyNamespaceList ( xmlNsPtr cur ) ;
1998-08-13 07:39:55 +04:00
1998-10-29 01:58:05 +03:00
/*
* Changing the content .
*/
extern xmlAttrPtr xmlSetProp ( xmlNodePtr node , const CHAR * name ,
const CHAR * value ) ;
1999-01-17 22:11:59 +03:00
extern CHAR * xmlGetProp ( xmlNodePtr node , const CHAR * name ) ;
1998-10-29 01:58:05 +03:00
extern xmlNodePtr xmlStringGetNodeList ( xmlDocPtr doc , const CHAR * value ) ;
extern xmlNodePtr xmlStringLenGetNodeList ( xmlDocPtr doc , const CHAR * value ,
int len ) ;
extern CHAR * xmlNodeListGetString ( xmlDocPtr doc , xmlNodePtr list , int inLine ) ;
extern void xmlNodeSetContent ( xmlNodePtr cur , const CHAR * content ) ;
extern void xmlNodeSetContentLen ( xmlNodePtr cur , const CHAR * content , int len ) ;
extern void xmlNodeAddContent ( xmlNodePtr cur , const CHAR * content ) ;
extern void xmlNodeAddContentLen ( xmlNodePtr cur , const CHAR * content , int len ) ;
extern CHAR * xmlNodeGetContent ( xmlNodePtr cur ) ;
/*
* Internal , don ' t use
*/
1998-08-13 07:39:55 +04:00
extern void xmlBufferWriteCHAR ( const CHAR * string ) ;
extern void xmlBufferWriteChar ( const char * string ) ;
1998-10-29 01:58:05 +03:00
/*
* Saving
*/
1998-09-23 04:49:46 +04:00
extern void xmlDocDumpMemory ( xmlDocPtr cur , CHAR * * mem , int * size ) ;
extern void xmlDocDump ( FILE * f , xmlDocPtr doc ) ;
int xmlSaveFile ( const char * filename , xmlDocPtr cur ) ;
1998-10-29 01:58:05 +03:00
/*
* Compression
*/
1998-09-24 23:15:06 +04:00
extern int xmlGetDocCompressMode ( xmlDocPtr doc ) ;
extern void xmlSetDocCompressMode ( xmlDocPtr doc , int mode ) ;
1998-09-23 04:49:46 +04:00
extern int xmlGetCompressMode ( void ) ;
extern void xmlSetCompressMode ( int mode ) ;
1998-08-13 07:39:55 +04:00
# ifdef __cplusplus
}
# endif
# endif /* __XML_TREE_H__ */