いや,ずっぽりはまった(笑
MSXMLを利用して,ORCA-CLAIMの電文XMLを読み込もうとしたら
IXMLDOMDocument.Load()が,エラー吐いて,読めやしない
原因をあれこれ追っかけていったら,
MSXMLのパーサが,構文解析エラーを起こしている模様
CLAIM電文(MML)中
-
<!DOCTYPE Mml SYSTEM....
の行を,コメントアウトすると
引きあがるようにはなる
でも,コメントアウトしたXMLをCLAIMに投げつけても
たぶん,エラー起こして,データ受信してくれないようなぁ
ってことで,さらに追っかけたら,こちらに,似たような事例...
IXMLDOMDocument.resolveExternals
IXMLDOMDocument.validateOnParse
二つのプロパティ,FALSEにすれば,読み込むまでは可能になるとのこと
今回は,読み込んで,一部書き換えて,保存するって,作業なんで
これ,FALSEにしても,実害ないかな?
DELPHIで書き起こしてみました
DELPHI:
- //メンバとして定義
- FdomDocument : IXMLDOMDocument;
- //**********************************************
- //コンストラクタ
- //
- //**********************************************
- constructor TClaimOutput.Create;
- begin
- inherited;
- FdomDocument := CoDOMDocument.Create(); //インスタンス生成
- FdomDocument.async := true; //同期モードがいいらしい
- end;
- //**********************************************
- //XMLテンプレートの読み込み
- //
- //**********************************************
- function TClaimOutput.Load : Boolean;
- var
- wb : WordBool;
- a : Integer;
- l : Integer;
- st : string;
- st1 : string;
- begin
- if (FileExists(FInPath + XML_INFILENAME) = false) then //ファイルが見つからない場合
- begin
- Result := false;
- exit;
- end;
- FdomDocument.resolveExternals := false; //二つのプロパティをFALSE
- FdomDocument.validateOnParse := false;
- wb := FdomDocument.load(FInPath + XML_INFILENAME); //CLAIM-XML読み込み
- if ( wb = true) then begin //OK時
- result := true;
- end else begin //NG時
- a := FdomDocument.parseError.errorCode;
- l := FdomDocument.parseError.line;
- st := FdomDocument.parseError.reason;
- st1 := FdomDocument.parseError.srcText;
- FErrorStr := IntToHex(a, 8) + ',' + IntToStr(l) + ',' + st + ',' + st1;
- //ShowMessage(FErrorStr);
- result := false;
- end;
- end;
とりあえず,本番の送受信テストまでは
この実装で行きますです
やばかったら,そのとき,また悩む,ということで(笑
あと,MSXMLのバージョン表はこちらですわん
とりあえず,MSXML3にて作業は続けております



