最新の更新情報

2012年2月
« 1月    
 1234
567891011
12131415161718
19202122232425
26272829  

本ブログのURL

qrcode.png

雨雲の動き

お天気

 
 
吟遊詩人の戯言 内専用の記事検索...
 
 

MSXML利用時,DTD関連のエラーでXMLが読めないときの対処


キーワード(クリックで関連記事が読めます) → , , , ,

関連記事



 
 

いや,ずっぽりはまった(笑

MSXMLを利用して,ORCA-CLAIMの電文XMLを読み込もうとしたら
IXMLDOMDocument.Load()が,エラー吐いて,読めやしない

原因をあれこれ追っかけていったら,
MSXMLのパーサが,構文解析エラーを起こしている模様


CLAIM電文(MML)中

    <!DOCTYPE Mml SYSTEM....

の行を,コメントアウトすると
引きあがるようにはなる

でも,コメントアウトしたXMLをCLAIMに投げつけても
たぶん,エラー起こして,データ受信してくれないようなぁ

ってことで,さらに追っかけたら,こちらに,似たような事例...

IXMLDOMDocument.resolveExternals
IXMLDOMDocument.validateOnParse

二つのプロパティ,FALSEにすれば,読み込むまでは可能になるとのこと

今回は,読み込んで,一部書き換えて,保存するって,作業なんで
これ,FALSEにしても,実害ないかな?

DELPHIで書き起こしてみました

DELPHI:
  1. //メンバとして定義
  2.     FdomDocument   : IXMLDOMDocument;
  3.  
  4. //**********************************************
  5. //コンストラクタ
  6. //
  7. //**********************************************
  8. constructor TClaimOutput.Create;
  9. begin
  10.   inherited;
  11.  
  12.     FdomDocument       :=  CoDOMDocument.Create();      //インスタンス生成
  13.     FdomDocument.async :=  true;    //同期モードがいいらしい
  14.  
  15. end;
  16.  
  17. //**********************************************
  18. //XMLテンプレートの読み込み
  19. //
  20. //**********************************************
  21. function TClaimOutput.Load : Boolean;
  22. var
  23.     wb : WordBool;
  24.     a : Integer;
  25.     l : Integer;
  26.     st : string;
  27.     st1 : string;
  28. begin
  29.     if (FileExists(FInPath + XML_INFILENAME) = false) then       //ファイルが見つからない場合
  30.     begin
  31.         Result := false;
  32.         exit;
  33.     end;
  34.  
  35.     FdomDocument.resolveExternals := false;     //二つのプロパティをFALSE
  36.     FdomDocument.validateOnParse  := false;
  37.     wb := FdomDocument.load(FInPath + XML_INFILENAME);   //CLAIM-XML読み込み
  38.  
  39.     if  ( wb = true) then  begin     //OK時
  40.         result := true;
  41.     end else begin            //NG時
  42.         a  := FdomDocument.parseError.errorCode;
  43.         l  := FdomDocument.parseError.line;
  44.         st := FdomDocument.parseError.reason;
  45.         st1 := FdomDocument.parseError.srcText;
  46.  
  47.         FErrorStr := IntToHex(a, 8) + ',' + IntToStr(l) + ',' + st + ',' + st1;
  48.         //ShowMessage(FErrorStr);
  49.         result := false;
  50.     end;
  51.  
  52. end;


とりあえず,本番の送受信テストまでは
この実装で行きますです

やばかったら,そのとき,また悩む,ということで(笑


あと,MSXMLのバージョン表はこちらですわん
とりあえず,MSXML3にて作業は続けております

 
 
 
 

コメントを残す

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">