00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00028
00029 #ifndef _XMLT_H
00030 #define _XMLT_H
00031
00032 #include "slist.h"
00033 #include "dictionary.h"
00034
00037 #define XML_UNKNOWN_TAG -1
00038
00041 #define XML_UNKNOWN_ATTRIBUTE -1
00042
00048 typedef struct
00049 {
00050 int attribute;
00051 char *value;
00052 char *unknown_attrib;
00053 }
00054 xml_attribute;
00055
00057 typedef enum
00058 {
00059 NODE, CDATA
00060 }
00061 xml_node_t;
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071 typedef struct _xml_node
00072 {
00073 xml_node_t type;
00074 int tag;
00076 struct _xml_node *parent;
00077 slist attributes;
00078 slist children;
00079 char *cdata;
00080 }
00081 xml_node;
00082
00098 void *
00099 xmlt_create_context (void (*callback) (void *, xml_node *),
00100 void *cb_data,
00101 dictionary *tags, dictionary *attribs);
00102
00109 int
00110 xmlt_parse (void *context, const char *data, size_t len);
00111
00115 void
00116 xmlt_free_context (void *context);
00117
00120 void
00121 xmlt_free_document (xml_node *doc);
00122
00128 void
00129 xmlt_rescan_document (xml_node *doc, dictionary *tags, dictionary *attribs);
00130
00135 xml_node *
00136 xmlt_get_next (xml_node *iter, xml_node *doc);
00137
00142 xml_node *
00143 xmlt_get_next_shallow (xml_node *iter);
00144
00145
00146
00147
00148
00149 xml_node *
00150 xmlt_find (xml_node *doc, xml_node *iter, int tag);
00151
00152
00153 xml_node *
00154 xmlt_find_if (xml_node *doc, xml_node *iter, int(*compare)(xml_node*));
00155
00156
00157
00158
00159 const char *
00160 xmlt_get_attrib (xml_node *node, int attribute);
00161
00162
00163 const char *
00164 xmlt_get_first_cdata (xml_node *node);
00165
00166
00167
00168
00169 void
00170 xmlt_for_each (xml_node *doc, void *user_data,
00171 void (*func) (void *, xml_node *));
00172
00173 #endif