- - PR -
OCLOBでのDB内XMLデータ(特殊文字有)の取得
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2009-04-02 16:16
質問です。よろしくお願いします。
環境:WindowsServer2003,WindowsXP SP .NET 2003 MFC oracle10g DB内のXMLデータをOCLOBを使って取得しようとしたのですが XMLタグ内にエンティティ参照文字("&"や"""など)がある場合、 同じXMLデータでも、PCによってREADメソッドの戻り値(読込データ長の合計バイト数)が異なる値が返りました。 一方は特殊文字を"&"と数えたバイト数、もう一方は"&"と数えたバイト数になっているようです。 「"&"と数えたバイト数」を返したのをWindowsServer2003で確認しました。 「"&"と数えたバイト数」をWindowsXP及びWindowsServer2003で確認しました。 これらは何に依存して決められるのか、ご存知の方いましたらご教授お願いします。 ※文中のエンティティ参照文字、表示しないので全角で書きました。本当は半角です。) ------------------------------------- 以下、コードです。 // Clob型の取得 // 引数 rClob XMLデータ rBuff 格納用バッファ // 戻り値 合計サイズ int C***::GetClobData( OClob* rClob, char* rBuff ) { unsigned char tWkBuff[DEF_EPG_APP_PNG_MAXSIZE]; unsigned char tSetBuff[DEF_EPG_APP_PNG_MAXSIZE*2]; unsigned long tbufsize; short tstatus; unsigned long tamtread; unsigned long tpoint = 0; memset( rBuff, 0, DEF_EPG_APP_PNG_MAXSIZE ); memset( tWkBuff, 0 , DEF_EPG_APP_PNG_MAXSIZE ); memset( tSetBuff, 0 , DEF_EPG_APP_PNG_MAXSIZE*2 ); try { unsigned int tsize = rClob->GetSize(); unsigned long toptchunk = rClob->GetOptimumChunkSize(); tbufsize = ( ( int )( 32768 / toptchunk ) ) * toptchunk; if (tbufsize > tsize) { tbufsize = tsize; } rClob->EnableStreaming( tbufsize ); tstatus = OLOB_NEED_DATA; tamtread = 0; tpoint = tamtread; while( tstatus == OLOB_NEED_DATA ) { tamtread = rClob->Read( &tstatus, tWkBuff, tbufsize ); // ←tamtreadの値がPCによって異なる if( tpoint + tamtread >= DEF_EPG_APP_PNG_MAXSIZE ) { return FALSE; } memcpy( &tSetBuff[tpoint], tWkBuff, tamtread ); tpoint += tamtread; } rClob->DisableStreaming(); memcpy( rBuff, tSetBuff, tpoint ); } catch( OException e ) { PutLog( loglvl_warning, "Clob エラー:[%s]:%s", e.GetFailedMethodName(), e.GetErrorText() ); // === LOG } return tpoint; ----------------------------------------- よろしくお願いします。 [ メッセージ編集済み 編集者: お椀 編集日時 2009-04-02 16:22 ] [ メッセージ編集済み 編集者: お椀 編集日時 2009-04-02 16:27 ] |
1