00001
00002 #ifndef __JBXL_TINY_XML_H_
00003 #define __JBXL_TINY_XML_H_
00004
00005
00027 #include "tools.h"
00028 #include "ttree.h"
00029 #include "jbxl_state.h"
00030
00031
00102 typedef tTree tXML;
00103
00104
00105
00106 #define XML_ANCHOR_NODE JBXL_STATE_ANCHOR
00107 #define XML_NAME_NODE 1
00108 #define XML_CONTENT_NODE 2
00109 #define XML_DOC_NODE 3
00110 #define XML_COMMENT_NODE 4
00111 #define XML_DATA_NODE 5
00112 #define XML_PROCESS_NODE 6
00113
00114
00115 #define XML_ONELINE_FORMAT 0
00116 #define XML_CRLF_FORMAT 1
00117 #define XML_INDENT_FORMAT 2
00118
00119
00120 #define XML_COMMENT_NODE_KEY "@COMMENT_NODE"
00121 #define XML_DATA_NODE_KEY "@DATA_NODE"
00122
00123
00124
00126
00127
00128 #define new_xml_node() new_tTree_node()
00129 #define new_xml() new_tTree_node()
00130 #define new_xml_anchor_node() new_tTree_anchor_node()
00131 #define del_xml_anchor(t) del_tTree_anchor_node((t))
00132 #define del_xml_anchor_nodet() del_tTree_anchor_node((t))
00133
00134
00135
00136 tXML* xml_parse(char* pp);
00137 tXML* xml_parse_file(const char* pp);
00138 tXML* xml_parse_seq(tXML* xml, char* pp);
00139 tXML* xml_main_parse(tXML* xml, char* pp, int skip);
00140
00141 int xml_parse_start_node(char* pp, char** node_name, char** node_attr, int* node_end);
00142 int xml_parse_end_node(char* pp, char** node_name);
00143 int xml_parse_content(char* pp, char** content);
00144 int xml_parse_comment_node(char* pp, char** comment);
00145 int xml_parse_data_node(char* pp, char** data);
00146 int xml_parse_processing_node(char* pp, char** node_name, char** node_attr);
00147 tList* xml_parse_attr(char* pp);
00148
00149 void close_xml(tXML* pp);
00150 int isnot_xml_name(unsigned char* pp);
00151
00152
00153 #define find_xml_top(p) find_tList_top(p)
00154 #define find_xml_end(p) find_tTree_end(p)
00155
00156
00157 Buffer xml_inverse_parse(tXML* pp, int mode);
00158 void xml_to_Buffer(tXML* pp, Buffer* buf, int mode, int indent);
00159 void xml_open_node_Buffer (tXML* pp, Buffer* buf, int mode, int indent);
00160 void xml_close_node_Buffer(tXML* pp, Buffer* buf, int mode, int indent);
00161 void xml_attr_to_Buffer(tList* pp, Buffer* buf);
00162
00163
00164 tXML* init_xml_doc(void);
00165 char* get_first_xml_nodename(tXML* xml);
00166 tXML* add_xml_node(tXML* xml, const char* name);
00167 tXML* insert_xml_node(tXML* xml, const char* name);
00168
00169 tXML* add_xml_attr(tXML* xml, const char* attr);
00170 tXML* add_xml_attr_str (tXML* xml, const char* name, const char* value);
00171 tXML* add_xml_attr_int (tXML* xml, const char* name, int value);
00172 tXML* add_xml_attr_float (tXML* xml, const char* name, float value);
00173 tXML* add_xml_attr_double(tXML* xml, const char* name, double value);
00174
00175 tXML* add_xml_content(tXML* xml, const char* value);
00176 tXML* append_xml_content(tXML* xml, const char* value);
00177 int add_xml_content_area(tXML* xml, int len);
00178
00179 #define join_xml(a, b) add_tTree_node((a), (b))
00180
00181 Buffer make_xml_attr_bystr (const char* name, const char* value);
00182 Buffer make_xml_attr_byint (const char* name, int value);
00183 Buffer make_xml_attr_byfloat (const char* name, float value);
00184 Buffer make_xml_attr_bydouble(const char* name, double value);
00185
00186 #define make_xml_attr_str(n, v) make_xml_attr_bystr ((n), (v))
00187 #define make_xml_attr_int(n, v) make_xml_attr_byint ((n), (v))
00188 #define make_xml_attr_float(n, v) make_xml_attr_byfloat ((n), (v))
00189 #define make_xml_attr_double(n, v) make_xml_attr_bydouble((n), (v))
00190
00191 char* xml_get_node_content(tXML* node);
00192 char* xml_get_node_attr(tXML* node, const char* attr);
00193
00194 tXML* dup_merge_xml(tXML* pp, tXML* tp);
00195
00196 #define free_xml(p) free_tTree_node((p))
00197 #define del_xml(p) del_tTree((p))
00198 #define del_all_xml(p) del_all_tTree((p))
00199 #define del_sisters_xml(p) del_sisters_tTree((p))
00200 #define del_sisters_children_xml(p) del_sisters_children_tTree((p))
00201
00202 void print_xml(FILE* fp, tXML* pp, int mode);
00203 void print_xml_tree(FILE* fp, tXML* pp, const char* space);
00204 void print_xml_node(FILE* fp, tXML* pp);
00205 void print_sister_xml_tree(FILE* fp, tXML* pp, const char* space);
00206
00207 #define print_tXML(f, x) print_tTree((f), (x))
00208 #define print_tXML_tree(f, x, s) print_tTree_tree((f), (x), (s))
00209
00210
00212
00213
00214 tXML* get_xml_node(tXML* pp, tXML* pt);
00215 int set_xml_node(tXML* pp, tXML* pt, const char* val);
00216 int set_xml_end_node(tXML* pp, tXML* pt);
00217
00218 tXML* get_xml_content(tXML* pp, tXML* pt);
00219 int set_xml_content(tXML* pp, tXML* pt, const char* val);
00220 tList* get_xml_attr(tXML* pp, tXML* pt);
00221 int set_xml_attr(tXML* pp, tXML* pt, tList* at);
00222
00223 tXML* get_xml_node_bystr(tXML* pp, const char* str);
00224 int set_xml_node_bystr(tXML* pp, const char* str, const char* val);
00225 int set_xml_end_node_bystr(tXML* pp, const char* str);
00226
00227 tXML* get_xml_content_bystr(tXML* pp, const char* str);
00228 int set_xml_content_bystr(tXML* pp, const char* str, const char* val);
00229 tList* get_xml_attr_bystr(tXML* pp, const char* str);
00230 int set_xml_attr_bystr(tXML* pp, const char* pt, tList* at);
00231
00232 int get_xml_int_content(tXML* pp, tXML* pt);
00233 int get_xml_int_content_bystr(tXML* pp, const char* str);
00234 float get_xml_float_content(tXML* pp, tXML* pt);
00235 float get_xml_float_content_bystr(tXML* pp, const char* str);
00236 double get_xml_double_content(tXML* pp, tXML* pt);
00237 double get_xml_double_content_bystr(tXML* pp, const char* str);
00238 char* get_xml_char_content(tXML* pp, tXML* pt);
00239 char* get_xml_char_content_bystr(tXML* pp, const char* str);
00240
00241 char* get_xml_char_attr(tXML* pp, tXML* pt, const char* attr);
00242 char* get_xml_char_attr_bystr(tXML* pp, const char* str, const char* attr);
00243 int get_xml_int_attr(tXML* pp, tXML* pt, const char* attr);
00244 int get_xml_int_attr_bystr(tXML* pp, const char* str, const char* attr);
00245 double get_xml_double_attr(tXML* pp, tXML* pt, const char* attr);
00246 double get_xml_double_attr_bystr(tXML* pp, const char* str, const char* attr);
00247
00248 int replace_xml_content(tXML*pp, tXML* pt, const char* src, const char* dst);
00249 int replace_xml_content_bystr(tXML*pp, const char* str, const char* src, const char* dst);
00250
00251 #define get_xml_node_str(p, s) get_xml_node_bystr((p), (s))
00252 #define set_xml_node_str(p, s, v) set_xml_node_bystr((p), (s), (v))
00253 #define set_xml_end_node_str(p, s) set_xml_end_node_bystr((p), (s))
00254 #define get_xml_content_str(p, s) get_xml_content_bystr((p), (s))
00255 #define set_xml_content_str(p, s, v) set_xml_content_bystr((p), (s), (v))
00256 #define get_xml_attr_str(p, s) get_xml_attr_bystr((p), (s))
00257 #define set_xml_attr_str(p, t, a) set_xml_attr_bystr((p), (t), (a))
00258 #define replace_xml_content_str(p, t, r, d) replace_xml_content_bystr((p), (t), (r), (d))
00259
00260 #define get_xml_int_content_str(p, s) get_xml_int_content_bystr((p), (s))
00261 #define get_xml_double_content_str(p, s) get_xml_double_content_bystr((p), (s))
00262 #define get_xml_char_content_str(p, s) get_xml_char_content_bystr((p), (s))
00263 #define get_xml_char_attr_str(p, s, v) get_xml_char_sttr_bystr((p), (s), (v))
00264
00265 #define get_xml_str_content(p, s) get_xml_char_content((p), (s))
00266 #define get_xml_str_content_str(p, s) get_xml_char_content_bystr((p), (s))
00267 #define get_xml_str_content_bystr(p, s) get_xml_char_content_bystr((p), (s))
00268 #define get_xml_str_attr(p, s) get_xml_char_attr((p), (s))
00269 #define get_xml_str_attr_str(p, s, v) get_xml_char_attr_bystr((p), (s), (v))
00270 #define get_xml_str_attr_bystr(p, s, v) get_xml_char_attr_bystr((p), (s), (v))
00271 #define get_xml_int_attr_str(p, s, v) get_xml_int_attr_bystr((p), (s), (v))
00272 #define get_xml_double_attr_str(p, s, v) get_xml_double_attr_bystr((p), (s), (v))
00273
00274
00275
00276 tList* get_xml_node_list(tXML* pp, tXML* pt);
00277 tList* get_xml_content_list(tXML* pp, tXML* pt);
00278 int set_xml_content_list(tXML* pp, tXML* pt, const char* content);
00279
00280 tList* get_xml_node_list_bystr(tXML* pp, const char* str);
00281 tList* get_xml_content_list_bystr(tXML* pp, const char* str);
00282 int set_xml_content_list_bystr(tXML* pp, const char* str, const char* content);
00283
00284 #define get_xml_node_list_str(p, s) get_xml_node_list_bystr((p), (s))
00285 #define get_xml_content_list_str(p, s) get_xml_content_list_bystr((p), (s))
00286 #define set_xml_content_list_str(p, s, c) set_xml_content_list_bystr((p), (s), (c))
00287
00288
00290
00291
00292 int find_match_xml(tXML* pp, tXML* pt);
00293 tXML* find_match_xml_endlist(tXML* pp, tXML* pt);
00294 tList* find_match_xml_endlist_rcsv(tXML* pp, tXML* pt, tXML* te);
00295 tXML* find_match_xml_end_node(tXML* pp, tXML* pt);
00296
00297 int check_match_xml(tXML* tp, tXML* tr);
00298 tXML* cmp_sisters_xml(tXML* tp, tXML* tr);
00299
00300
00302
00303
00304 int get_node_integer(tXML* tp, const char* name, int no);
00305 Buffer get_node_content(tXML* tp, const char* name, int no);
00306
00307 int return_exist_node(tXML* tp, const char* name, int no, Buffer* value);
00308
00309 int replace_all_node_integer (tXML* tp, const char* name, int src, int dst);
00310 int replace_all_node_contents(tXML* tp, const char* name, const char* src, const char* dst);
00311 int replace_all_node_contents_rcsv(tXML* tp, const char* name, const char* src, const char* dst);
00312
00313 int replace_all_node_byid(tXML* tp, const char* src, const char* dst, int id);
00314 int replace_all_node_byid_rcsv(tXML* tp, const char* src, const char* dst, int id);
00315
00316
00318
00319
00320 Buffer xml_rpc_request_pack(const char* method, tXML* xml);
00321 tXML* xml_rpc_add_member(tXML* xml, char* name, char* value, char* kind);
00322 tXML* xml_rpc_end_member(tXML* xml);
00323 tXML* xml_rpc_add_array(tXML* xml, tXML* arry);
00324 tXML* xml_rpc_end_array(tXML* xml);
00325
00326
00327 #endif // __JBXL_TINY_XML_H_