1#ifndef __JBXL_TINY_XML_H_
2#define __JBXL_TINY_XML_H_
108#define XML_ANCHOR_NODE JBXL_STATE_ANCHOR
109#define XML_NAME_NODE 1
110#define XML_CONTENT_NODE 2
111#define XML_DOC_NODE 3
112#define XML_COMMENT_NODE 4
113#define XML_DATA_NODE 5
114#define XML_PROCESS_NODE 6
117#define XML_ONELINE_FORMAT 0
118#define XML_CRLF_FORMAT 1
119#define XML_TAB_FORMAT 2
120#define XML_SPACE_FORMAT 3
121#define XML_SPACE2_FORMAT 3
122#define XML_SPACE4_FORMAT 4
125#define XML_COMMENT_NODE_KEY "@COMMENT_NODE"
126#define XML_DATA_NODE_KEY "@DATA_NODE"
133#define new_xml_node() new_tTree_node()
134#define new_xml() new_tTree_node()
135#define new_xml_anchor_node() new_tTree_anchor_node()
136#define del_xml_anchor(t) del_tTree_anchor_node((t))
137#define del_xml_anchor_nodet() del_tTree_anchor_node((t))
158#define find_xml_top(p) find_tList_top(p)
159#define find_xml_end(p) find_tTree_end(p)
185#define join_xml(a, b) add_tTree_node((a), (b))
192#define make_xml_attr_str(n, v) make_xml_attr_bystr ((n), (v))
193#define make_xml_attr_int(n, v) make_xml_attr_byint ((n), (v))
194#define make_xml_attr_float(n, v) make_xml_attr_byfloat ((n), (v))
195#define make_xml_attr_double(n, v) make_xml_attr_bydouble((n), (v))
202#define free_xml(p) free_tTree_node((p))
203#define del_xml(p) del_tTree((p))
204#define del_xml_node(p) del_tTree_node((p))
205#define del_all_xml(p) del_all_tTree((p))
206#define del_sisters_xml(p) del_sisters_tTree((p))
207#define del_sisters_children_xml(p) del_sisters_children_tTree((p))
214#define print_tXML(f, x) print_tTree((f), (x))
215#define print_tXML_tree(f, x, s) print_tTree_tree((f), (x), (s))
260#define get_xml_node_str(p, s) get_xml_node_bystr((p), (s))
261#define set_xml_node_str(p, s, v) set_xml_node_bystr((p), (s), (v))
262#define set_xml_end_node_str(p, s) set_xml_end_node_bystr((p), (s))
263#define get_xml_content_str(p, s) get_xml_content_bystr((p), (s))
264#define set_xml_content_str(p, s, v) set_xml_content_bystr((p), (s), (v))
265#define get_xml_attr_str(p, s) get_xml_attr_bystr((p), (s))
266#define set_xml_attr_str(p, t, a) set_xml_attr_bystr((p), (t), (a))
267#define replace_xml_content_str(p, t, r, d) replace_xml_content_bystr((p), (t), (r), (d))
269#define get_xml_int_content_str(p, s) get_xml_int_content_bystr((p), (s))
270#define get_xml_double_content_str(p, s) get_xml_double_content_bystr((p), (s))
271#define get_xml_char_content_str(p, s) get_xml_char_content_bystr((p), (s))
272#define get_xml_char_attr_str(p, s, v) get_xml_char_sttr_bystr((p), (s), (v))
274#define get_xml_str_content(p, s) get_xml_char_content((p), (s))
275#define get_xml_str_content_str(p, s) get_xml_char_content_bystr((p), (s))
276#define get_xml_str_content_bystr(p, s) get_xml_char_content_bystr((p), (s))
277#define get_xml_str_attr(p, s) get_xml_char_attr((p), (s))
278#define get_xml_str_attr_str(p, s, v) get_xml_char_attr_bystr((p), (s), (v))
279#define get_xml_str_attr_bystr(p, s, v) get_xml_char_attr_bystr((p), (s), (v))
280#define get_xml_int_attr_str(p, s, v) get_xml_int_attr_bystr((p), (s), (v))
281#define get_xml_double_attr_str(p, s, v) get_xml_double_attr_bystr((p), (s), (v))
292#define get_xml_node_list_str(p, s) get_xml_node_list_bystr((p), (s))
293#define get_xml_content_list_str(p, s) get_xml_content_list_bystr((p), (s))
294#define set_xml_content_list_str(p, s, c) set_xml_content_list_bystr((p), (s), (c))
Tiny Tree Graph 構造ライブラリヘッダ
double get_xml_double_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を double型で返す.
char * get_xml_char_attr_bystr(tXML *pp, const char *str, const char *attr)
get_xml_char_attr() の _bystr バージョン.free() してはいけない.
tXML * xml_main_parse(tXML *xml, char *pp, int skip)
部分的な XMLデータを解釈して,tXMLのツリー構造に格納する.パーサの内部的なメイン関数.
void _xml_to_Buffer(tXML *pp, Buffer *buf, int mode, int indent)
xml_inverse_parse()用の補助関数.
float get_xml_float_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を float型で返す.
void print_sister_xml_tree(FILE *fp, tXML *pp, const char *space)
XMLツリーの表示.ppの姉妹ノードも出力する.
tXML * xml_rpc_end_array(tXML *xml)
配列データを閉じて,送信用データを生成する.
int get_node_integer(tXML *tp, const char *name, int no)
tp中のXMLデータから no番目のノード '<node_name>node_content(整数)</node_name>' の node_content(整数)を得る.
tXML * append_xml_content_node(tXML *xml, const char *value)
XMLツリーのxml の直下のコンテントノードにコンテンツを追加する.
void print_xml_node(FILE *fp, tXML *pp)
MLのノード情報を表示する.デバッグ用.
tXML * get_xml_node(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードへのポインタを返す.
tXML * xml_rpc_add_member(tXML *xml, char *name, char *value, char *kind)
XML-RPC の <member> データを作って,繋げていく.
int set_xml_end_node_bystr(tXML *pp, const char *str)
set_xml_end_node(tXML* pp, tXML* pt) の _bystr バージョン
tXML * add_xml_attr_double(tXML *xml, const char *name, double value)
xml に属性名 name, double型実数の属性値 value を持つノードを追加する.
int return_exist_node(tXML *tp, const char *name, int no, Buffer *value)
bufの中に ノード '<name>content</name>' が存在するかどうかチェックする.
int xml_parse_comment_node(char *pp, char **comment)
XMLのコメントノードを処理する.
int set_xml_node_bystr(tXML *pp, const char *str, const char *val)
set_xml_node(tXML* pp, tXML* pt, const char* val) の _bystr バージョン
tXML * add_xml_attr_str(tXML *xml, const char *name, const char *value)
xml に属性名 name, 文字列の属性値 value を持つノードを追加する.
int replace_xml_content(tXML *pp, tXML *pt, const char *src, const char *dst)
get_xml_content() を使用し,XMLキーの src部分を dstで書き換える.
tXML * set_xml_content_node(tXML *xml, const char *value)
XMLツリーのxml の直下のコンテントノードの値を置き換える.
float get_xml_float_content_bystr(tXML *pp, const char *str)
get_xml_float_content(tXML* pp, tXML* pt) の _bystr バージョン.
int replace_all_node_contents(tXML *tp, const char *name, const char *src, const char *dst)
XMLツリー pp内で ノード名が nameである全てのノードのコンテントを,srcから dstに書き換える.
int find_match_xml(tXML *pp, tXML *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.姉妹ツリーも検索するので注意.
void print_xml_tree(FILE *fp, tXML *pp, const char *space)
XMLツリーをそのままツリー表示する.デバッグ用.
tXML * dup_merge_xml(tXML *pp, tXML *tp)
XMLツリー ppの直下にXMLツリー tpを複製する.
tXML * xml_parse_file(const char *pp)
ファイルから読み込んでパースする.
char * xml_get_node_attr(tXML *node, const char *attr)
属性値を持つノードのポインタから,指定された属性値へのポインタを返す.free() してはいけない.
tXML * xml_rpc_add_array(tXML *xml, tXML *arry)
<value><struct> データから 配列データ <data>...</data> を作って繋げていく.
double get_xml_double_attr_bystr(tXML *pp, const char *str, const char *attr)
get_xml_double_attr() の _bystr バージョン.
void print_xml(FILE *fp, tXML *pp, int mode)
XMLの表示(出力).
int _replace_all_node_byid_rcsv(tXML *tp, const char *src, const char *dst, int id)
replace_all_node_byid() の補助関数
tList * _find_match_xml_endlist_rcsv(tXML *pp, tXML *pt, tXML *te)
find_match_xml_endlist() の補助関数
char * get_xml_char_content_bystr(tXML *pp, const char *str)
get_xml_char_content(tXML* pp, tXML* pt) の _bystr バージョン.free() してはいけない.
tXML * xml_rpc_end_member(tXML *xml)
<struct><member> データを閉じて,<value> データを作り出す.
int replace_all_node_integer(tXML *tp, const char *name, int src, int dst)
XMLツリー pp内で ノード名が nameである全てのノードのコンテント(整数)を,srcから dstに書き換える.
int get_xml_int_attr_bystr(tXML *pp, const char *str, const char *attr)
get_xml_int_attr() の _bystr バージョン.
tXML * xml_parse_seq(tXML *xml, char *pp)
部分的な XMLデータを解釈して,tXMLのツリー構造に格納する.断片的にXMLデータを入力する場合に使用する.
int set_xml_attr_bystr(tXML *pp, const char *pt, tList *at)
set_xml_attr(tXML* pp, tXML* pt, tList* at) の _bystr バージョン.
int get_xml_int_content_bystr(tXML *pp, const char *str)
get_xml_int_content(tXML* pp, tXML* pt) の _bystr バージョン
int set_xml_attr(tXML *pp, tXML *pt, tList *at)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードのノードの属性としてatの値をコピーする.
tXML * get_xml_node_bystr(tXML *pp, const char *str)
get_xml_node(tXML* pp, tXML* pt) の _bystr バージョン
tList * get_xml_content_list_bystr(tXML *pp, const char *str)
get_xml_conetnt_list_bystr() の _bystr バージョン.
Buffer xml_rpc_request_pack(const char *method, tXML *xml)
XML-RPC用のデータを生成する.
char * get_first_xml_nodename(tXML *xml)
XMLツリーの最初のノードの名前を返す.
int set_xml_content_list(tXML *pp, tXML *pt, const char *content)
get_xml_content_list() で検出したコンテントを, content で置き換える.
int xml_parse_start_node(char *pp, char **node_name, char **node_attr, int *node_end)
XMLの開始ノードを処理する.
int set_xml_end_node(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードへのポインタを返す.
int check_match_xml(tXML *tp, tXML *tr)
XMLツリー tpが XMLツリー trと同じかどうかを検査する.
Buffer make_xml_attr_byfloat(const char *name, float value)
属性名 name, float型実数の属性値 value を持つ Buffer型変数を作成する.
Buffer make_xml_attr_bystr(const char *name, const char *value)
属性名 name, 文字列の属性値 value を持つ Buffer型変数を作成する.
int set_xml_content_list_bystr(tXML *pp, const char *str, const char *content)
set_xml_content_list_bystr() の _bystr バージョン.
int set_xml_node(tXML *pp, tXML *pt, const char *val)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノード対応したノードにノード名をコピーする.
int xml_parse_processing_node(char *pp, char **node_name, char **node_attr)
XMLのプロセッシングノードを処理する
void close_xml(tXML *pp)
パースエラーを起こしたツリーを強制的に正常化する.
void xml_attr_to_Buffer(tList *pp, Buffer *buf)
リストに保存されたノードの属性をテキストへ戻す.
tXML * add_xml_attr(tXML *xml, const char *attr)
xml に属性(attr)を追加する.
int set_xml_content_bystr(tXML *pp, const char *str, const char *val)
set_xml_content(tXML* pp, tXML* pt, char* val) の _bystr バージョン
tList * get_xml_attr(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードのノード属性値へのリストを altp に入れて返す.
double get_xml_double_content_bystr(tXML *pp, const char *str)
get_xml_double_content(tXML* pp, tXML* pt) の _bystr バージョン.
tXML * add_xml_attr_float(tXML *xml, const char *name, float value)
xml に属性名 name, float型実数の属性値 value を持つノードを追加する.
int replace_xml_content_bystr(tXML *pp, const char *str, const char *src, const char *dst)
replace_xml_content(tXML*pp, tXML* pt, char* src, char* dst) の _bystr バージョン.
int replace_all_node_byid(tXML *tp, const char *src, const char *dst, int id)
XMLツリー pp内で ノードの種別が idである全てのノードの内容を srcから dstに書き換える.
int xml_parse_data_node(char *pp, char **data)
XMLのデータノード(その他エレメントノードなど)を処理する.
tXML * insert_xml_node(tXML *xml, const char *name)
XMLツリーのxml の直下(姉妹の一番上:長子)にノード(属性は指定しない)を挿入する.
int get_xml_int_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を int型で返す.
tXML * add_xml_node(tXML *xml, const char *name)
XMLツリーのxml の直下(姉妹の一番下:末っ子)にノード(属性は指定しない)を挿入する.
tXML * xml_parse(char *pp)
文字列のXMLデータを解釈して,tXMLのツリーを生成する.
tList * xml_parse_attr(char *pp)
XMLのノード属性を解釈して,リスト(tList)にする.
char * get_xml_char_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を char*型で返す.free() してはいけない.
tXML * find_match_xml_end_node(tXML *pp, tXML *pt)
XMLツリー pp内で XMLツリー ptと同じパターンの枝を探し,ptの最後のノードに対応する pp内のノードへのポインタを返す.
tList * get_xml_content_list(tXML *pp, tXML *pt)
XMLツリー pp内で XMLツリー ptと同じパターンの枝を探し,ptに一致した枝の,ptの最後のノードに対応するノードのコンテントへのポインタをリストに格納して返す.
int add_xml_content_area(tXML *xml, int len)
xml に空のコンテントノードを追加する.
void xml_close_node_Buffer(tXML *pp, Buffer *buf, int mode, int indent)
ツリー中のXMLのクローズノードのデータを元の書式に戻して Bufferに格納する.
int isnot_xml_name(unsigned char *pp)
XML名として不適切かどうかを大まかに判断する.
Buffer get_node_content(tXML *tp, const char *name, int no)
tp中のXMLデータから no番目のノード '<name>node_content</name>' のnode_contentのコピーを得る.
tXML * init_xml_doc(void)
XML のドキュメントヘッダを作成する.
int get_xml_int_attr(tXML *pp, tXML *pt, const char *attr)
get_xml_node() で検索したノードから,属性値 attrの値を int型で取り出す.
char * get_xml_char_attr(tXML *pp, tXML *pt, const char *attr)
get_xml_node() で検索したノードから,属性値 attrの値を char*型で取り出す.free() してはいけない.
int xml_parse_end_node(char *pp, char **node_name)
XMLの終了ノードを処理する.
Buffer make_xml_attr_bydouble(const char *name, double value)
属性名 name, double型実数の属性値 value を持つ Buffer型変数を作成する.
void xml_open_node_Buffer(tXML *pp, Buffer *buf, int mode, int indent)
ツリー中のXMLのオープンノードのデータを元の書式に戻して Bufferに格納する.
tXML * find_match_xml_endlist(tXML *pp, tXML *pt)
ツリー pp内で ツリー ptと同じパターンの枝を全て探して,その枝のptの最後のノードに対応するノードの情報をリストにして返す.
Buffer make_xml_attr_byint(const char *name, int value)
属性名 name, 整数の属性値 value を持つ Buffer型変数を作成する.
char * xml_get_node_content(tXML *node)
コンテントへのポインタを返す.free() してはいけない.
double get_xml_double_attr(tXML *pp, tXML *pt, const char *attr)
get_xml_node() で検索したノードから,属性値 attrの値を double型で取り出す.
tXML * get_xml_content(tXML *pp, tXML *pt)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノードに対応したノードのコンテントへのポインタを altp に入れて返す.
tXML * get_xml_attr_node(tXML *pp, const char *key, const char *val)
属性 key=val のノードを探し,最初に見つけたノードを返す.
tXML * get_xml_content_bystr(tXML *pp, const char *str)
get_xml_content(tXML* pp, tXML* pt) の _bystr バージョン
tList * get_xml_attr_bystr(tXML *pp, const char *str)
get_xml_attr(tXML* pp, tXML* pt, tList* at) の _bystr バージョン.
tXML * add_xml_content_node(tXML *xml, const char *value)
XMLツリーのxml の直下にコンテントを挿入する.
tXML * cmp_sisters_xml(tXML *tp, tXML *tr)
XMLノード tpの姉妹ノードが trの姉妹ノードと同じ XMLノードまたはコンテントであるかを比較する.
Buffer xml_inverse_parse(tXML *pp, int mode)
ppに格納された XMLデータを元の書式に戻して Bufferに格納する.xml_parse() の逆.
int xml_parse_content(char *pp, char **content)
XMLのコンテントを処理する.
tList * get_xml_node_list(tXML *pp, tXML *pt)
XMLツリー pp内で XMLツリー ptと同じパターンの枝を探し,ptに一致した枝の,ptの最後のノードに対応するノードへのポインタをリストに格納して返す.
tList * get_xml_node_list_bystr(tXML *pp, const char *str)
get_xml_node_list() の _bystr バージョン.
int set_xml_content(tXML *pp, tXML *pt, const char *val)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後ノードに対応したのノードのコンテントを contentで置き換える.
int _replace_all_node_contents_rcsv(tXML *tp, const char *name, const char *src, const char *dst)
replace_all_node_content() の補助関数
tXML * add_xml_attr_int(tXML *xml, const char *name, int value)
xml に属性名 name, 整数の属性値 value を持つノードを追加する.