DOMを使用し、XMLファイルを扱う時のエラー処理について

解決


タカ  2007-02-16 19:52:33  No: 64445

よろしくお願いします。
Visual Studio2005 C++の環境で

XMLファイルを扱う時のエラー処理についてご教授願います。

以下ソース

HRESULT hr;
CoInitialize(NULL);

  try{
    MSXML2::IXMLDOMDocument2Ptr pDoc;
    hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument));
    SUCCEEDED(hr) ? 0 : throw err_no;

    pDoc->async = VARIANT_FALSE;

    /* XMLファイルのロード */
    if((pDoc->load(stLB.File_name) !=VARIANT_TRUE)){
        return err_no;
    }

    /* <STATION>をルート検索 */
    INodeListPtr plSTATION = pDoc->getElementsByTagName("STATION");

    IElementPtr peSTATION = plSTATION->Getitem(0);

    /* <STATION>の属性取得 */
    _variant_t vari_STATION = peSTATION->getAttribute("no");

    /* <LB>の要素取得 */
    IElementPtr peLB = peSTATION->
                       getElementsByTagName("LB")->Getitem(0);
    _variant_t  vari_LB  = peLB->Gettext();

    //variantオブジェクト破棄
    VariantClear(&vari_STATION);
    VariantClear(&vari_LB);

    // COMライブラリの終了処理
    CoUninitialize();

  }catch(_com_error &err){
return err_no;


タカ  2007-02-16 19:59:49  No: 64446

失礼しました、途中で送信してしまったので続きです。

  }catch(_com_error &err){
     return err_no;
  }
return 0;

###################################
最初の質問であげたソース内容で
以下について
①XMLファイルが存在しないとき
②<STATION>タグが存在しない場合
<ABCDE>
  <!--STATION no="0">
    <LB>0000-00FF</LB>
  </STATION-->
</ABCDE>
③<STATION>の属性が存在しないとき
<ABCDE>
  <STATION>
    <LB>0000-00FF</LB>
  </STATION>
</ABCDE>
④<LB>タグが存在しないとき
<ABCDE>
  <STATION no="0">
    <AA>0000-00FF</AA>
  </STATION-->
</ABCDE>

###############################################
①については対応できてると思うのですが、
そのほかの対応策としてはどう解決したらよいでしょうか。
また、そのほかエラー対策が甘そうな所がありましたらご指摘願います。


επιστημη  2007-02-16 23:53:41  No: 64447

> そのほかの対応策としてはどう解決したらよいでしょうか。

どうしたいんですか? それはあなたが決めることではないんですか?

> そのほかエラー対策が甘そうな所がありましたらご指摘願います。

何を正しく/何を誤りとするか もまた、あなたが決めることではないんですか?


タカ  2007-02-17 02:16:39  No: 64448

επιστημηさん失礼致しました。

知りたいエラー対策は
④<LB>タグが存在しないときの対策です。
<ABCDE>
      <STATION no="0">
          <AA>0000-00FF</AA>
      </STATION-->
</ABCDE>

/* <LB>の要素取得 */
IElementPtr peLB = peSTATION->
                       getElementsByTagName("LB")->Getitem(0);
_variant_t vari_LB = peLB->Gettext();

よろしくお願いします。


タカ  2007-02-17 02:37:05  No: 64449

タグが存在しない時のエラーですが、

 }catch(_com_error &err){

でちゃんと検出できていました。

お騒がせ致しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加