00001
00025 #ifndef _PURPLE_XMLNODE_H_
00026 #define _PURPLE_XMLNODE_H_
00027
00028 #ifdef __cplusplus
00029 extern "C" {
00030 #endif
00031
00035 typedef enum _XMLNodeType
00036 {
00037 XMLNODE_TYPE_TAG,
00038 XMLNODE_TYPE_ATTRIB,
00039 XMLNODE_TYPE_DATA
00040 } XMLNodeType;
00041
00045 typedef struct _xmlnode xmlnode;
00046 struct _xmlnode
00047 {
00048 char *name;
00049 char *xmlns;
00050 XMLNodeType type;
00051 char *data;
00052 size_t data_sz;
00053 struct _xmlnode *parent;
00054 struct _xmlnode *child;
00055 struct _xmlnode *lastchild;
00056 struct _xmlnode *next;
00057 };
00058
00066 xmlnode *xmlnode_new(const char *name);
00067
00076 xmlnode *xmlnode_new_child(xmlnode *parent, const char *name);
00077
00084 void xmlnode_insert_child(xmlnode *parent, xmlnode *child);
00085
00094 xmlnode *xmlnode_get_child(const xmlnode *parent, const char *name);
00095
00105 xmlnode *xmlnode_get_child_with_namespace(const xmlnode *parent, const char *name, const char *xmlns);
00106
00114 xmlnode *xmlnode_get_next_twin(xmlnode *node);
00115
00124 void xmlnode_insert_data(xmlnode *node, const char *data, gssize size);
00125
00134 char *xmlnode_get_data(xmlnode *node);
00135
00143 void xmlnode_set_attrib(xmlnode *node, const char *attr, const char *value);
00144
00153 void xmlnode_set_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns, const char *value);
00154
00163 const char *xmlnode_get_attrib(xmlnode *node, const char *attr);
00164
00174 const char *xmlnode_get_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns);
00175
00182 void xmlnode_remove_attrib(xmlnode *node, const char *attr);
00183
00191 void xmlnode_remove_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns);
00192
00199 void xmlnode_set_namespace(xmlnode *node, const char *xmlns);
00200
00207 const char *xmlnode_get_namespace(xmlnode *node);
00208
00218 char *xmlnode_to_str(xmlnode *node, int *len);
00219
00230 char *xmlnode_to_formatted_str(xmlnode *node, int *len);
00231
00243 xmlnode *xmlnode_from_str(const char *str, gssize size);
00244
00252 xmlnode *xmlnode_copy(const xmlnode *src);
00253
00259 void xmlnode_free(xmlnode *node);
00260
00261 #ifdef __cplusplus
00262 }
00263 #endif
00264
00265 #endif