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

解決


タカ  2007-02-16 10:52:33  No: 64445  IP: 192.*.*.*

よろしくお願いします。
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 10:59:49  No: 64446  IP: 192.*.*.*

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

  }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 14:53:41  No: 64447  IP: 192.*.*.*

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

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

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

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

編集 削除
タカ  2007-02-16 17:16:39  No: 64448  IP: 192.*.*.*

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

知りたいエラー対策は
④<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-16 17:37:05  No: 64449  IP: 192.*.*.*

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

 }catch(_com_error &err){

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

お騒がせ致しました。

編集 削除