InterBase API を利用した XML の生成
XML のエクスポート へ戻る
InterBase には、InterBase テーブルから直接 XML ドキュメントを生成するための次の 3 つの API 呼出しがあります: isc_dsql_xml_fetch()、isc_dsql_xml_fetch_all()、isc_dsql_xml_buffer_fetch()。
これらの機能は、新しいクライアント側のライブラリの一部で、Winodws では ibxml.dll、Solaris や Linux では ibxml.so というファイルです。
- これらの関数に定義された構造体は、新しいヘッダー ファイル
ibxml.hの中にあります。 - プロトタイプ定義は、ファイル
ibxml_proto.hに含まれています。 このヘッダー ファイルはまた、内部でibxml.hをインクルードしています。
この機能を使用するには、ライブラリをリンク パスに追加し、新しいヘッダー ファイルをコンパイラの include ファイルに追加しなければなりません。
新しい関数プロトタイプは次のとおりです:
isc_dsql_xml_buffer_fetch()は、XML 形式のテキストを指定されたバッファに返します。
int isc_dsql_xml_fetch(ISC_STATUS *status_vector,
isc_stmt_handle *stmt_handle,
unsigned short da_version,
char *buffer
int buffer_size
XSQLDA *xsqlda,
IB_XMLDA *ib_xmlda);
isc_dsql_xml_buffer_fetch() を使用するには、最低 1024 文字分のバッファを領域確保する必要があり、これが buffer 引数で関数に渡されます。 buffer_size 引数は、この渡されたバッファのサイズをレポートします。 関数は、バッファに書き込まれた文字のサイズを、終端の null 文字を抜いて返します。 処理を継続するのに十分なメモリがなかった場合には -1 を返し、バッファ サイズが、ヘッダーやフッターを完全に格納するのに小さすぎる場合には -2 を返します。 この関数が、不完全なヘッダー、フッター、レコードを返すことはありません。 完全な XML バッファを取得するために、再度呼び出しを行う必要がある場合には、xmlda_more_data が設定されます。
In order to make the calls work with Delphi, use the regular POINTER 呼出しを Delphi で動作させるには、標準の POINTER 型を使用して、IBXMLDA 構造体に FILE* 型の領域を確保します。
isc_dsql_xml_fetch()は、取得したデータを、XML 形式のファイルに追加し、このデータをXSQLDAに返します。
int isc_dsql_xml_fetch(ISC_STATUS *status_vector,
isc _stmt_handle *stmt_handle,
unsigned short da_version,
XSQLDA *xsqlda,
IB_XMLDA *ib_xmlda);
isc_dsql_xml_fetch_all()は、事前に準備され実行されたステートメント ハンドルを使用して、XML 形式のファイルを作成します。
int isc_dsql_xml_fetch(ISC_STATUS *status_vector,
isc_stmt_handle *stmt_handle,
unsigned short da_version,
XSQLDA *xsqlda,
IB_XMLDA *ib_xmlda);
これらの関数は、isc_dsql_prepare() で準備され、isc_dsql_execute() で実行されたステートメントで動作します。 ib_xmlda は、初期化された XML ディスクリプタ エリア(IB_XMLDA)へのポインタです。
isc_dsql_xml_fetch() は、XSQLDA を使用した、カーソルでのデータへの連続アクセスを許可します。
Blob および配列はサポートされていません。