60 if (node->state<0)
return xml;
71 if (xml->next!=NULL) {
155 if (xml!=node)
return xml;
158 else xml->state = node->state;
160 if (xml->next!=NULL) {
192 char* node_name = NULL;
193 char* node_attr = NULL;
196 if (pp ==NULL)
return xml;
197 if (xml==NULL)
return NULL;
199 if (skip)
while (*pp!=
'\0' && *pp!=
'<') pp++;
210 if (node_name!=NULL && xml->ldat.key.buf!=NULL) {
211 if (!strcmp((
const char*)node_name, (
const char*)(xml->ldat.key.buf))) {
212 if (xml->next!=NULL) {
219 if (xml->prev!=NULL) xml = xml->prev;
232 else if (!strncmp(pp+1,
"!--", 3)) {
237 if (xml->prev!=NULL) xml = xml->prev;
243 else if (*(pp+1)==
'!') {
248 if (xml->prev!=NULL) xml = xml->prev;
254 else if (*(pp+1)==
'?') {
266 if (xml->prev!=NULL) xml = xml->prev;
282 if (xml->prev!=NULL) xml = xml->prev;
295 if (xml->prev!=NULL) {
302 else n = xml->state = m;
320 if (xml->prev!=NULL) {
334 if (n<=0)
return xml;
376 if (node_name==NULL || node_attr==NULL || node_end==NULL)
return JBXL_ARGS_ERROR;
386 nn = mm = (int)(pt - pp);
390 *node_name = (
char*)malloc((
size_t)(mm + 1));
392 memcpy(*node_name, pp, mm);
393 (*node_name)[mm] =
'\0';
397 freeNull(*node_name);
404 freeNull(*node_name);
416 nn += (int)(pt - pp) + 1;
421 freeNull(*node_name);
427 *node_attr = (
char*)malloc((
size_t)(mm + 1));
428 if (*node_attr==NULL) {
429 freeNull(*node_name);
432 memcpy(*node_attr, pp, mm);
433 (*node_attr)[mm] =
'\0';
440 freeNull(*node_name);
441 freeNull(*node_attr);
483 nn = mm = (int)(pt - pp);
487 work = (
char*)malloc((
size_t)(mm+1));
489 memcpy(work, pp, mm);
526 if (*pp==
'<')
return nn;
529 while (*pt!=
'<' && *pt!=
'\0') pt++;
532 if (mm==0)
return nn;
535 work = (
char*)malloc((
size_t)(mm+1));
537 memcpy(work, pp, mm);
570 if (pp==NULL)
return NULL;
571 sz = (int)strlen((
const char*)pp) + 1;
572 nm = (
char*)malloc(sz);
573 if (nm==NULL)
return NULL;
576 vl = (
char*)malloc(sz);
584 while (*pp==
' ' && *pp!=
'\0') pp++;
587 while (*pt!=
'=' && *pt!=
'\0') pt++;
594 memcpy(nm, pp, (
size_t)sz);
598 if (*pt!=
'"' && *pt!=
'\'') {
606 while(*pt!=qt && *pt!=
'\0') pt++;
613 memcpy(vl+1, pp, (
size_t)sz);
619 if (lt==NULL) lt = lp;
622 if (*pp!=
' ' && *pp!=
'\0') {
626 while (*pp==
' ' && *pp!=
'\0') pp++;
669 nn = mm = (int)(pt - pp);
673 *node_name = (
char*)malloc((
size_t)(mm + 1));
675 memcpy(*node_name, pp, mm);
676 (*node_name)[mm] =
'\0';
684 nn += (int)(pt - pp) + 1;
689 freeNull(*node_name);
695 *node_attr = (
char*)malloc((
size_t)(mm + 1));
696 if (*node_attr==NULL) {
697 freeNull(*node_name);
700 memcpy(*node_attr, pp, mm);
701 (*node_attr)[mm] =
'\0';
707 if (strncmp(pt,
"?>", 2)) {
708 freeNull(*node_name);
709 freeNull(*node_attr);
746 nn = mm = (int)(pt - pp);
750 *comment = (
char*)malloc((
size_t)(mm+1));
752 memcpy(*comment, pp, mm);
753 (*comment)[mm] =
'\0';
786 nn = mm = (int)(pt - pp);
790 *data = (
char*)malloc((
size_t)(mm+1));
792 memcpy(*data, pp, mm);
812 if (pp==NULL)
return TRUE;
813 if (*pp==
'\0')
return TRUE;
816 if (*pp<=0x2c)
return TRUE;
817 if (*pp==0x2f)
return TRUE;
818 if (*pp>=0x3b && *pp<=0x40)
return TRUE;
819 if (*pp>=0x5b && *pp<=0x5e)
return TRUE;
820 if (*pp==0x60)
return TRUE;
821 if (*pp>=0x7b && *pp<=0x7f)
return TRUE;
844 if (pp->next!=NULL) {
852 while(pp->esis!=NULL) pp = pp->esis;
897 if (pp==NULL)
return buf;
899 if (pp==NULL)
return buf;
903 if (buf.
buf==NULL)
return buf;
905 while (pp->esis!=NULL) pp = pp->esis;
932 if (pp->next!=NULL) {
980 if (pp->ldat.lst!=NULL) {
983 if (pp->next==NULL) {
1003 if (buf->
buf[buf->
vldsz-1]==
'\n') {
1008 if (pp->esis!=NULL || pp->ysis!=NULL) {
1010 char* tabs = (
char*)malloc(pp->depth-indent+1);
1012 for (i=indent; i<pp->depth; i++) tabs[i-indent] =
'\t';
1013 tabs[pp->depth-indent] =
'\0';
1037 if (pp->ldat.key.buf!=NULL) {
1040 if (pp->ldat.lst!=NULL) {
1065 if (pp->ldat.val.buf!=NULL) {
1090 if (pp->ldat.val.buf!=NULL) {
1115 if (pp->ldat.key.buf!=NULL) {
1118 if (pp->ldat.lst!=NULL) {
1147 if (pp->next!=NULL) {
1184 if (pp->ldat.val.buf!=NULL) {
1205 tXML* xml =
xml_parse((
char*)
"<?xml version=\"1.0\" encoding=\"utf-8\"?>");
1223 if (name==NULL)
return NULL;
1227 if (pp->prev!=NULL) pp->prev->ldat.lv++;
1246 if (xml==NULL || name==NULL)
return NULL;
1250 if (pp->prev!=NULL) pp->prev->ldat.lv++;
1291 if (xml==NULL || content==NULL)
return NULL;
1296 if (pp->prev!=NULL) pp->prev->ldat.lv++;
1317 if (xml==NULL || content==NULL)
return NULL;
1327 if (pp->ldat.key.vldsz!=0)
cat_s2Buffer(
" ", &(pp->ldat.key));
1350 if (xml==NULL || content==NULL)
return NULL;
1378 if (xml==NULL || len<=0)
return FALSE;
1380 char* area = (
char*)malloc(len);
1381 if (area==NULL)
return FALSE;
1382 memset(area, (
int)
' ', len-1);
1387 pp->ldat.key.buf[0] =
'\0';
1388 pp->ldat.key.vldsz = 0;
1403 if (xml==NULL || attr==NULL)
return NULL;
1408 if (xml->ldat.lst==NULL) xml->ldat.lst = lp;
1422 if (xml==NULL || name==NULL)
return NULL;
1439 if (xml==NULL || name==NULL)
return NULL;
1456 if (xml==NULL || name==NULL)
return NULL;
1473 if (xml==NULL || name==NULL)
return NULL;
1493 char* nodename = NULL;
1495 if (xml==NULL)
return NULL;
1501 if (lp->ldat.key.buf!=NULL) {
1502 nodename = (
char*)lp->ldat.key.buf;
1592 if (node==NULL || node->next==NULL)
return NULL;
1595 if (node->next->ldat.id==
XML_CONTENT_NODE)
return (
char*)(node->next->ldat.key.buf);
1608 if (node==NULL)
return NULL;
1611 tList* lt = node->ldat.lst;
1613 if (!strcmp((
const char*)lt->ldat.key.buf, attr))
return (
char*)(lt->ldat.val.buf);
1634 if (tp==NULL)
return pp;
1637 if (tp->next!=NULL) tp = tp->next;
1693 if (fp==NULL) fp = stderr;
1699 if (buf.
buf!=NULL) {
1700 fprintf(fp,
"%s", buf.
buf);
1703 else fprintf(fp,
"(XML is NULL)\n");
1706 fprintf(fp,
"(XML is NULL)\n");
1721 if (fp==NULL) fp = stderr;
1729 fprintf(fp,
"%d: %d [%d] %s (%d)\n", pp->depth, pp->ldat.id, pp->state, pp->ldat.key.buf, num);
1730 if (pp->altp!=NULL) {
1731 fprintf(fp,
" altp -> %s, %s\n", pp->altp->ldat.key.buf, pp->altp->ldat.val.buf);
1735 fprintf(fp,
"(XML is ANCHOR only)\n");
1739 fprintf(fp,
"(XML is NULL)\n");
1762 if (fp==NULL) fp = stderr;
1769 for(i=0; i<pp->depth; i++) fprintf(fp,
"%s", space);
1770 for(i=0; i<pp->depth-1; i++) fprintf(fp,
"%s",
" ");
1775 fprintf(fp,
"(XML is ANCHOR only)\n");
1779 fprintf(fp,
"(XML is NULL)\n");
1800 if (fp==NULL) fp = stderr;
1804 if (pp->next!=NULL) pp = pp->next;
1807 while(pp->esis!=NULL) pp = pp->esis;
1814 if (pp->esis!=NULL || pp->depth>=0) fprintf(fp,
"\n");
1816 for(i=0; i<pp->depth; i++) fprintf(fp,
"%s", space);
1822 fprintf(fp,
"%d: %d [%d] %s (%d)", pp->depth, ld.id, pp->state, ld.key.buf, num);
1824 tList* lst = ld.lst;
1825 fprintf(fp,
" attr -->");
1827 fprintf(fp,
" %s=%s", lst->ldat.key.buf, lst->ldat.val.buf);
1838 fprintf(fp,
"(XML is NULL)\n");
1880 if (pp==NULL || pt==NULL)
return NULL;
1884 if (pp->next!=NULL) pp = pp->next;
1888 if (pt->next!=NULL) pt = pt->next;
1893 if (tt==NULL)
return FALSE;
1895 while(pp->esis!=NULL) pp = pp->esis;
1897 if (fnd) tt = tt->altp;
1925 if (pp==NULL || pt==NULL || name==NULL)
return FALSE;
1928 if (tt==NULL)
return FALSE;
1963 if (pp==NULL || pt==NULL)
return FALSE;
1967 if (pp->next!=NULL) pp = pp->next;
1971 if (pt->next!=NULL) pt = pt->next;
1976 if (tt==NULL)
return FALSE;
1979 while(pp->esis!=NULL) pp = pp->esis;
2009 if (pp==NULL || (key==NULL && val==NULL) )
return NULL;
2012 if (pp->next!=NULL) pp = pp->next;
2015 while(pp->esis!=NULL) pp = pp->esis;
2018 if (pp->ldat.lst!=NULL) {
2019 tList* lst = pp->ldat.lst;
2022 if (
ex_strncasecmp(val, (
const char*)lst->ldat.val.buf, 0))
return pp;
2028 if (pp->next!=NULL) {
2030 if (pm!=NULL)
return pm;
2071 if (pp==NULL || pt==NULL)
return NULL;
2075 if (pp->next!=NULL) pp = pp->next;
2079 if (pt->next!=NULL) pt = pt->next;
2084 if (tt==NULL)
return NULL;
2086 if (dm==NULL)
return NULL;
2089 while(pp->esis!=NULL) pp = pp->esis;
2092 if (fnd) tt = dm->altp;
2123 if (pp==NULL || pt==NULL || content==NULL)
return FALSE;
2126 if (tt==NULL)
return FALSE;
2143 if (node!=NULL) ret = atoi((
char*)(node->ldat.key.buf));
2158 if (node!=NULL) ret = (float)atof((
char*)(node->ldat.key.buf));
2173 if (node!=NULL) ret = atof((
char*)(node->ldat.key.buf));
2188 if (node!=NULL) ret = (
char*)(node->ldat.key.buf);
2212 if (pp==NULL || pt==NULL)
return NULL;
2215 if (tt!=NULL) lp = tt->ldat.lst;
2228 if (pp==NULL || pt==NULL || attr==NULL)
return ret;
2245 if (pp==NULL || pt==NULL || attr==NULL)
return ret;
2252 char* ptr = (
char*)buf.
buf;
2253 if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] =
'\0';
2254 if (ptr[0]==
'"') ptr++;
2272 if (pp==NULL || pt==NULL || attr==NULL)
return ret;
2279 char* ptr = (
char*)buf.
buf;
2280 if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] =
'\0';
2281 if (ptr[0]==
'"') ptr++;
2311 if (pp==NULL || pt==NULL || at==NULL)
return FALSE;
2333 if (pp==NULL || pt==NULL || src==NULL || dst==NULL)
return FALSE;
2336 if (tt==NULL)
return FALSE;
2358 if (pp==NULL || str==NULL)
return FALSE;
2377 if (pp==NULL || str==NULL || val==NULL)
return FALSE;
2396 if (pp==NULL || str==NULL)
return FALSE;
2415 if (pp==NULL || str==NULL)
return FALSE;
2435 if (node!=NULL) ret = atoi((
char*)(node->ldat.key.buf));
2451 if (node!=NULL) ret = (float)atof((
char*)(node->ldat.key.buf));
2467 if (node!=NULL) ret = atof((
char*)(node->ldat.key.buf));
2484 if (node!=NULL) ret = (
char*)(node->ldat.key.buf);
2499 if (pp==NULL || str==NULL || val==NULL)
return FALSE;
2518 if (pp==NULL || str==NULL)
return NULL;
2536 if (pp==NULL || str==NULL || attr==NULL)
return ret;
2554 if (pp==NULL || str==NULL || attr==NULL)
return ret;
2561 char* ptr = (
char*)buf.
buf;
2562 if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] =
'\0';
2563 if (ptr[0]==
'"') ptr++;
2582 if (pp==NULL || str==NULL || attr==NULL)
return ret;
2589 char* ptr = (
char*)buf.
buf;
2590 if (ptr[strlen(ptr)-1]==
'"') ptr[strlen(ptr)-1] =
'\0';
2591 if (ptr[0]==
'"') ptr++;
2610 if (pp==NULL || str==NULL || at==NULL)
return FALSE;
2629 if (pp==NULL || src==NULL || src==NULL || dst==NULL)
return FALSE;
2660 if (pp==NULL || pt==NULL)
return NULL;
2663 if (pp->next!=NULL) pp = pp->next;
2667 if (pt->next!=NULL) pt = pt->next;
2696 if (pp==NULL || pt==NULL)
return NULL;
2699 if (pp->next!=NULL) pp = pp->next;
2703 if (pt->next!=NULL) pt = pt->next;
2708 if (dm==NULL)
return NULL;
2710 if (dm==NULL)
return NULL;
2737 if (pp==NULL || pt==NULL || content==NULL)
return 0;
2740 if (lt==NULL)
return 0;
2743 if (lt->altp!=NULL) {
2765 if (pp==NULL || str==NULL)
return NULL;
2785 if (pp==NULL || str==NULL)
return NULL;
2805 if (pp==NULL || str==NULL || content==NULL)
return 0;
2856 if (ret)
return TRUE;
2858 if (pp->next!=NULL) {
2892 while(pp->esis!=NULL) pp = pp->esis;
2914 if (ret && te->altp!=NULL) {
2916 lm->altp = te->altp;
2918 if (lp==NULL) lp = lt;
2922 if (pp->next!=NULL) {
2926 if (lp==NULL) lp = lt;
2931 if (!ret) pp = pp->ysis;
2954 if (pp==NULL || pt==NULL)
return NULL;
3001 if (tp==NULL || tr==NULL)
return FALSE;
3008 if (tt==NULL)
return FALSE;
3013 while (tb!=NULL && ret) {
3014 if (tb->next==NULL) ret =
TRUE;
3016 else if (tb->next!=NULL && ta->next==NULL) ret =
FALSE;
3078 while (ta!=NULL && tb!=NULL) {
3082 if ((ta->ldat).key.buf!=NULL && (tb->ldat).key.buf!=NULL) {
3083 if (ta->ldat.id!=tb->ldat.id || strcmp((
char*)((ta->ldat).key.buf), (
char*)((tb->ldat).key.buf)))
break;
3095 if (tb==NULL)
return ts;
3125 if (tp==NULL || name==NULL)
return content;
3130 if (tt->next!=NULL) {
3133 if (tt==NULL)
return content;
3154 if (content.
buf==NULL) ret = 0;
3155 else ret = atoi((
const char*)content.
buf);
3175 if (content!=NULL) *content = buf;
3195 char nums[20], numd[20];
3223 if (pp==NULL || dst==NULL)
return 0;
3226 if (pp->next!=NULL) pp = pp->next;
3229 while(pp->esis!=NULL) pp = pp->esis;
3247 if (pp->ldat.key.buf!=NULL && pp->ldat.id==
XML_NAME_NODE && pp->ldat.lv>0) {
3248 if (name==NULL || !strcmp(name, (
const char*)(pp->ldat.key.buf))) {
3249 tXML* tt = pp->next;
3258 else if (tt->ldat.key.buf!=NULL && strstr((
const char*)tt->ldat.key.buf, src)!=NULL) {
3295 if (pp==NULL || dst==NULL)
return 0;
3298 if (pp->next!=NULL) pp = pp->next;
3301 while(pp->esis!=NULL) pp = pp->esis;
3319 if (id<0 || pp->ldat.id==
id) {
3324 else if (pp->ldat.key.buf!=NULL && strstr((
const char*)pp->ldat.key.buf, src)!=NULL) {
3410 if (name==NULL)
return xml;
3419 else if (kind[0]==
'\0') knd =
add_xml_node(val,
"string");
Buffer make_Buffer(int sz)
Buffer型変数のバッファ部をつくり出す.
Buffer replace_sBuffer_bystr(Buffer buf, const char *frm, const char *tos)
buf.buf中の文字列 frmを tosで置き換えた 新しい Bufferを返す
void free_Buffer(Buffer *buf)
Buffer型変数のバッファ部を解放する
Buffer read_Buffer_file(const char *fn)
ファイル fn の内容を Buffer型変数に読み込む.
Buffer init_Buffer()
初期化したBuffer型変数を返す.
Buffer dup_Buffer(Buffer buf)
Buffer型変数のコピーをつくる.
int cat_Buffer(Buffer *src, Buffer *dst)
Buffer変数 srcから dstへバッファを catする.
void add_indent_Buffer(Buffer *buf, char cc, int len)
インデント(cc x num) を付加する.
#define copy_s2Buffer(src, dst)
copy_b2Buffer()
#define cat_s2Buffer(src, dst)
cat_b2Buffer()
#define make_Buffer_bystr(str)
set_Buffer()
#define JBXL_XML_NODE_CLOSED
XMLノードは閉じている
#define JBXL_ARGS_ERROR
不正な引数(NULLなど)
#define JBXL_STATE_ANCHOR
アンカーノード
#define JBXL_XML_DEFAULT_STATE
XMLデータの初期状態
#define JBXL_XML_NODE_EMPTY
XMLの空のノード
#define JBXL_XML_NOT_CLOSED
XMLデータが閉じていない
#define JBXL_XML_NODE_OPENED
XMLノードは開いている
#define JBXL_XML_PARSE_ERROR
XML の解釈エラー
#define JBXL_XML_SEQUENCE_ERROR
XMLノードのリンクエラー
#define JBXL_MALLOC_ERROR
メモリ確保エラー
#define JBXL_XML_MULTI_ROOT
XMLは複数のルート(TOP)を持っている.(パース済み)
#define JBXL_XML_PARSED
XMLパース済み
int vldsz
データの長さ.バイナリデータの場合も使用可能.文字列の場合は 0x00 を含まない.
unsigned char * buf
バッファの先頭へのポインタ.str[bufsz]は必ず 0x00となる.
tList * dup_tList(tList *pp)
リストを複製する.
void del_all_tList(tList **pp)
リストの全ノードの削除.ポインタ ppのノードを含むリスト全体を削除する.
tList * insert_tList(tList *pp, tList *pt)
ノードppの直ぐ後ろに ptを挿入する.
int count_tList(tList *pp)
リストの ppノード以降のノードの数を数える.
tList * del_tList(tList **pp)
指定したリストノード以降のリストを削除.
tList * find_tList_end(tList *pl)
リストの最後のノードを探す.
tList * add_tList_end(tList *pp, tList *pt)
リストppの最後に リストptを追加する.
tList * new_tList_node(void)
リスト用の空ノードを動的に生成する.
#define add_tList_node_str(p, k, v)
add_tList_node_bystr()
tTree * new_tTree_anchor_node(void)
ツリー用の ANCHORノードを動的に生成.
void adjust_tTree_depth(tTree *pp)
指定したノード ppを基準にして,木の深さを測り直す
tTree * strncmp_tTree(tTree *pp, const char *key, int len, int no)
ツリーノードのキー値のサーチ
int count_tTree(tTree *pp)
ツリーの ppノード以降のノードの数を数える.
tTree * dup_merge_tTree(tTree *pp, tTree *tp)
ツリー ppの直下にツリー tpを複製する.
tTree * insert_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを長子としてリストに追加.
void _clear_tTree_ctrl(tTree *pp)
ppツリーの ctrlをクリアする.
tTree * add_tTree_node_bystr(tTree *pp, int id, int lv, const char *key, const char *val, void *ptr, int sz)
ノードを末っ子としてリストに追加.
void _copy_tTree_byctrl(tTree *pt)
同じパターンの枝を検索し,ptのノードの属性をコピーする.
int find_match_tTree(tTree *pp, tTree *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.
#define TREE_NOCMP_NODE
比較対照から外すノード.通常は無条件で一致させる.
#define TREE_NOCMP_COPY_NODE
比較対照から外し,最後にコピー処理を行うノード.通常は無条件で一致させる.
#define TREE_ALREADY_FOUND_NODE
検索などにおいて既に見つけたノード.見つけたことを確定したノード.
int _replace_all_node_byid_rcsv(tXML *pp, const char *src, const char *dst, int id)
replace_all_node_byid() の補助関数
double get_xml_double_content(tXML *pp, tXML *pt)
get_xml_content() を使用し,XML コンテンツの内容を double型で返す.
int _replace_all_node_contents_rcsv(tXML *pp, const char *name, const char *src, const char *dst)
replace_all_node_content() の補助関数
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(整数)を得る.
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 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で書き換える.
float get_xml_float_content_bystr(tXML *pp, const char *str)
get_xml_float_content(tXML* pp, tXML* pt) の _bystr バージョン.
int find_match_xml(tXML *pp, tXML *pt)
ツリー pp内で ツリー ptと同じパターンの枝を探す.姉妹ツリーも検索するので注意.
void print_xml_tree(FILE *fp, tXML *pp, const char *space)
XMLツリーをそのままツリー表示する.デバッグ用.
int set_xml_content(tXML *pp, tXML *pt, const char *content)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後ノードに対応したのノードのコンテントを contentで置き換える.
tXML * dup_merge_xml(tXML *pp, tXML *tp)
XMLツリー ppの直下にXMLツリー tpを複製する.
char * xml_get_node_attr(tXML *node, const char *attr)
属性値を持つノードのポインタから,指定された属性値へのポインタを返す.free() してはいけない.
tXML * xml_parse_file(const char *fn)
ファイルから読み込んでパースする.
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の表示(出力).
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に書き換える.
tXML * set_xml_content_node(tXML *xml, const char *content)
XMLツリーのxml の直下のコンテントノードの値を置き換える.
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データを入力する場合に使用する.
tXML * xml_rpc_add_array(tXML *xml, tXML *array)
<value><struct> データから 配列データ <data>...</data> を作って繋げていく.
int get_xml_int_content_bystr(tXML *pp, const char *str)
get_xml_int_content(tXML* pp, tXML* pt) の _bystr バージョン
Buffer xml_rpc_request_pack(const char *name, tXML *xml)
XML-RPC用のデータを生成する.
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 バージョン.
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と同じかどうかを検査する.
int replace_all_node_byid(tXML *pp, const char *src, const char *dst, int id)
XMLツリー pp内で ノードの種別が idである全てのノードの内容を srcから dstに書き換える.
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型変数を作成する.
tXML * init_xml_doc()
XML のドキュメントヘッダを作成する.
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 *name)
同じパターンの枝を探し,ptに最初に一致した枝の,ptの最後のノード対応したノードにノード名をコピーする.
int xml_parse_processing_node(char *pp, char **node_name, char **node_attr)
XMLのプロセッシングノードを処理する
void close_xml(tXML *pp)
パースエラーを起こしたツリーを強制的に正常化する.
int replace_all_node_contents(tXML *pp, const char *name, const char *src, const char *dst)
XMLツリー pp内で ノード名が nameである全てのノードのコンテントを,srcから dstに書き換える.
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 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 の直下(姉妹の一番下:末っ子)にノード(属性は指定しない)を挿入する.
int return_exist_node(tXML *tp, const char *name, int no, Buffer *content)
bufの中に ノード '<name>content</name>' が存在するかどうかチェックする.
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のコピーを得る.
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 set_xml_attr_bystr(tXML *pp, const char *str, tList *at)
set_xml_attr(tXML* pp, tXML* pt, tList* at) の _bystr バージョン.
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() してはいけない.
tXML * append_xml_content_node(tXML *xml, const char *content)
XMLツリーのxml の直下のコンテントノードにコンテンツを追加する.
tXML * add_xml_content_node(tXML *xml, const char *content)
XMLツリーのxml の直下にコンテントを挿入する.
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 * 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 バージョン.
tXML * add_xml_attr_int(tXML *xml, const char *name, int value)
xml に属性名 name, 整数の属性値 value を持つノードを追加する.
#define XML_COMMENT_NODE
コメントノード
#define XML_PROCESS_NODE
XML_DOC_NODE 以外の <? ... ?>ノード
#define XML_DATA_NODE
<! ... > ノード
#define XML_DOC_NODE
<? xml... ?> ノード
#define XML_SPACE4_FORMAT
先頭に空白4つ " " をつけ,ノードごとに改行する.
#define make_xml_attr_float(n, v)
make_xml_attr_byfloat()
#define make_xml_attr_int(n, v)
make_xml_attr_byint()
#define XML_TAB_FORMAT
先頭にインデント(TAB)をつけ,ノードごとに改行する.
#define join_xml(a, b)
ツリー aへノード bを末っ子として追加.
#define XML_CONTENT_NODE
内容(コンテント)ノード
#define XML_DATA_NODE_KEY
#define XML_NAME_NODE
ネームノード
#define find_xml_top(p)
find_tList_top()
#define make_xml_attr_str(n, v)
make_xml_attr_bystr()
#define del_xml(p)
指定したノード以下のXMLツリー(ppの姉妹は含まない)を削除する.
#define make_xml_attr_double(n, v)
make_xml_attr_bydouble()
#define del_all_xml(p)
XMLツリーの全ノードの削除.ポインタ ppのノードを含むXMLツリー全体を削除する.
#define new_xml_node()
new_tTree_node()
#define XML_COMMENT_NODE_KEY
#define XML_ANCHOR_NODE
アンカーノード
#define XML_ONELINE_FORMAT
改行なしの一行にする.
#define find_xml_end(p)
find_tTree_end()
#define XML_SPACE_FORMAT
先頭に空白2つ " " をつけ,ノードごとに改行する.