00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _EGG_XML_H_
00023 #define _EGG_XML_H_
00024
00025 #define XML_NONE (1 << 0)
00026 #define XML_INDENT (1 << 1)
00027 #define XML_TRIM_TEXT (1 << 2)
00028
00029 typedef enum {
00030 XML_ELEMENT = 0,
00031 XML_PROCESSING_INSTRUCTION,
00032 XML_COMMENT,
00033 XML_CDATA_SECTION,
00034
00035 XML_ATTRIBUTE,
00036 XML_DOCUMENT,
00037
00038 } xml_node_type_t;
00039
00040 typedef struct {
00041 char *name;
00042 char *value;
00043 int len;
00044 } xml_attr_t;
00045
00046 typedef struct {
00047 char *name;
00048 char *value;
00049 } xml_entity_t;
00050
00051 typedef struct xml_node {
00052 xml_node_type_t type;
00053 char *name;
00054
00055 char *text;
00056 int len;
00057
00058 void *client_data;
00059
00060 struct xml_node *next, *prev;
00061 struct xml_node *next_sibling, *prev_sibling;
00062 struct xml_node *parent, *children, *last_child;
00063 int nchildren;
00064
00065 xml_attr_t **attributes;
00066 int nattributes;
00067 } xml_node_t;
00068
00069 typedef struct {
00070 char *filename;
00071 xml_node_t *root;
00072 } xml_document_t;
00073
00074 xml_node_t *xml_node_vlookup(xml_node_t *root, va_list args, int create);
00075 xml_node_t *xml_node_lookup(xml_node_t *root, int create, ...);
00076 xml_node_t *xml_node_path_lookup(xml_node_t *root, const char *path, int index, int create);
00077
00078 char *xml_node_fullname(xml_node_t *node);
00079
00080 int xml_node_get_str(char **str, xml_node_t *node, ...);
00081 char *xml_node_str(xml_node_t *node, char *def);
00082 int xml_node_set_str(const char *str, xml_node_t *node, ...);
00083
00084 int xml_node_get_int(int *value, xml_node_t *node, ...);
00085 int xml_node_int(xml_node_t *node, int def);
00086 int xml_node_set_int(int value, xml_node_t *node, ...);
00087
00088 int xml_node_get_vars(xml_node_t *node, const char *fmt, ...);
00089 int xml_node_set_vars(xml_node_t *node, const char *fmt, ...);
00090
00091 xml_node_t *xml_node_new(void);
00092 xml_node_t *xml_node_new_named(const char *name);
00093 void xml_node_free(xml_node_t *node);
00094 void xml_node_unlink(xml_node_t *node);
00095 void xml_node_delete(xml_node_t *node);
00096 void xml_node_delete_callbacked(xml_node_t *node, void (*callback)(void *));
00097 void xml_doc_delete(xml_node_t *root);
00098 void xml_node_append(xml_node_t *parent, xml_node_t *child);
00099
00100 xml_node_t *xml_root_element(xml_node_t *node);
00101
00102 xml_attr_t *xml_attr_new(char *name, char *value);
00103 void xml_attr_free(xml_attr_t *attr);
00104 int xml_node_append_attr(xml_node_t *node, xml_attr_t *attr);
00105
00106 xml_node_t *xml_parse_file(const char *fname);
00107 int xml_save_file(const char *file, xml_node_t *node, int options);
00108 void xml_set_error(const char *err);
00109 const char *xml_last_error(void);
00110
00111 #endif