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
00144 char *xmlnode_get_data_unescaped(xmlnode *node);
00145
00153 void xmlnode_set_attrib(xmlnode *node, const char *attr, const char *value);
00154
00163 void xmlnode_set_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns, const char *value);
00164
00173 const char *xmlnode_get_attrib(xmlnode *node, const char *attr);
00174
00184 const char *xmlnode_get_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns);
00185
00192 void xmlnode_remove_attrib(xmlnode *node, const char *attr);
00193
00201 void xmlnode_remove_attrib_with_namespace(xmlnode *node, const char *attr, const char *xmlns);
00202
00209 void xmlnode_set_namespace(xmlnode *node, const char *xmlns);
00210
00217 const char *xmlnode_get_namespace(xmlnode *node);
00218
00228 char *xmlnode_to_str(xmlnode *node, int *len);
00229
00240 char *xmlnode_to_formatted_str(xmlnode *node, int *len);
00241
00253 xmlnode *xmlnode_from_str(const char *str, gssize size);
00254
00262 xmlnode *xmlnode_copy(const xmlnode *src);
00263
00269 void xmlnode_free(xmlnode *node);
00270
00271 #ifdef __cplusplus
00272 }
00273 #endif
00274
00275 #endif