/* myxml.c * APR-UTIL の XML API を使うサンプル * ・getElementsByTagName と getElementById */ #ifndef _MYXML_H_ #define _MYXML_H_ #ifndef APR_TABLES_H #include "apr_tables.h" #endif #ifndef APR_STRINGS_H #include "apr_strings.h" #endif #ifndef APR_XML_H #include "apr_xml.h" #endif /* * apr_xml_elem* の配列のイテレーション * func は配列内の apr_xml_elem* を処理するコールバック関数 * void func (void *func_ctx, apr_xml_elem * elem); */ void my_apr_xml_elem_array_do( apr_array_header_t *arr , void *func , void *func_ctx ); /* * エレメントのCDATAを返す関数 * 返り値: * エレメントのCDATAの文字列 * メモ: * n->first_cdata.first から next メンバ変数をたどって text メンバ変数の * 文字列をコンカテネートする。 */ char * concat_cdata( apr_xml_elem *n /* IN: 対象エレメント */ , apr_pool_t *pool /* IN: メモリプール */ ); /* * エレメントから、指定した名前のアトリビュートの値を検索する関数 */ char const * getAttribute( apr_xml_elem *n /* IN: 対象エレメント */ , char *aname /* IN: 検索アトリビュート名 */ ); /* 指定エレメント配下の、検索タグ名にマッチするエレメント群を検索する関数 * 戻り値: * 検索タグ名にマッチしたエレメントを保持する配列 * 子エレメントが存在しない場合はヌル。 */ apr_array_header_t *getElementsByTagNameFromElement( apr_pool_t *pool /* IN: メモリプール */ , apr_xml_elem *n /* IN: 対象エレメント */ , char *tagname /* IN: 検索タグ名 */ ); /* XMLドキュメント内の検索タグ名にマッチしたエレメント群を検索する関数 * 戻り値: * 検索タグ名にマッチしたエレメントを保持する配列 */ apr_array_header_t *getElementsByTagName( apr_pool_t *pool /* IN: メモリプール */ , apr_xml_doc *doc /* IN: 対象XMLドキュメント */ , char *tagname /* IN: 検索タグ名 */ ); /* XMLドキュメント内の検索IDにマッチしたエレメントを検索する関数 * 戻り値: * 検索IDにマッチしたエレメント */ apr_xml_elem * getElementById ( apr_xml_doc *doc /* IN: 対象XMLドキュメント */ , char *id /* IN: 検索ID */ ); /* エレメントの表示。指定されたエレメントのタグ名、アトリビュート、 * 直下のCDATAの表示のみ。NS 非対応。 * 戻り値: * なし */ void printElement ( apr_file_t *out /* IN: 出力先ファイルポインタ */ , apr_xml_elem *elem /* IN: 表示対象エレメント */ ); /* エレメントの表示。指定されたエレメントのタグ名、アトリビュート、 * 直下のCDATAの表示に加え、子エレメント(child)と続くエレメントも再帰的に表示。 * 戻り値: * なし */ void printElementRec ( apr_file_t *out /* IN: 出力先ファイルポインタ */ , apr_xml_elem *elem /* IN: 表示対象エレメント */ ); #endif /* _MYXML_H_ */