none
設定ファイル (XMLファイル) から必要な情報が取得できなかったときに throw すべき例外クラスは? RRS feed

  • 質問

  • 西脇です。

    設定ファイル (XMLファイル) から必要な情報を取得して、処理を行うことをしています。
    例をあげると、こんな XMLファイルです。

    <a>
      <b>
        <c Command="Init">
          <d LocalDir="Log" RemoteDir="ClientLog" />
          <d LocalDir="Journal" RemoteDir="ClientJournal" />
        </c>
      </b>
    </a>

    設定ファイルを XmlDocument に Load してから、の処理として、この、xpath = /a/b/c[@Command="Init"] が見つからなかったときに、例外を throw しようと思います。

    例外をみて何が間違えているのかをわかるようにしたいので、例外のプロパティで、BaseURI と 探していた xpath などがわかるとよいのですが、ApplicationException とかで Message に詳細を書くのがよいでしょうか。

    また、.NET Framework 3.5 で定義済みの例外でこの目的(例外をみて何が間違えているのかをわかるようにしたい)にあう例外は存在しますでしょうか。
    2010年1月29日 3:01

回答

  • 個人的には XmlException 使って、詳細は Message に記述してもいいような気がします。
    たとえばこんな感じになるかと・・・

    throw new System.Xml.XmlException("構成ファイルに必要なノードが見つかりませんでした。\n ノード名[a] ");
    • 回答としてマーク 西脇 2010年2月1日 9:49
    2010年1月29日 4:10
    モデレータ
  • その設定ファイルに対するXML Schemaを定義して、検証してみてはどうでしょうか?
    XPathがどうこうだけでなく、値が適切か? なんかも定義・検証できます。
    またそのSchemaを元にXML Editorが補完してくれて設定ファイルを編集しやすくなる、なんて利点もあります。
    • 回答としてマーク 西脇 2010年2月1日 9:49
    2010年1月30日 8:59

すべての返信

  • 個人的には XmlException 使って、詳細は Message に記述してもいいような気がします。
    たとえばこんな感じになるかと・・・

    throw new System.Xml.XmlException("構成ファイルに必要なノードが見つかりませんでした。\n ノード名[a] ");
    • 回答としてマーク 西脇 2010年2月1日 9:49
    2010年1月29日 4:10
    モデレータ
  • あとは Document Explorer 使って、言語を 「C#」 、テクノロジを 「.NET 開発」、コンテンツの種類を 「ドキュメントおよび記事」 に絞り
     "Exception 継承" で検索かけると Exception の派生クラスが大量に HIT します。

    この中から要件に最も適当と思われる例外クラスを調べてみるのもいいかと思います。
    2010年1月29日 4:15
    モデレータ
  • 個人的には XmlException 使って、詳細は Message に記述してもいいような気がします。
    たとえばこんな感じになるかと・・・

    throw new System.Xml.XmlException("構成ファイルに必要なノードが見つかりませんでした。\n ノード名[a] ");

    ありがとうございます。

    XmlException は候補として考えていますが、SourceUri プロパティへ値をセットする手段が見つからず、困っています。
    2010年1月29日 4:34
  • その設定ファイルに対するXML Schemaを定義して、検証してみてはどうでしょうか?
    XPathがどうこうだけでなく、値が適切か? なんかも定義・検証できます。
    またそのSchemaを元にXML Editorが補完してくれて設定ファイルを編集しやすくなる、なんて利点もあります。
    • 回答としてマーク 西脇 2010年2月1日 9:49
    2010年1月30日 8:59
  • 佐佑理さん、ありがとうございます。

    XML文書を読み込むときに XmlValidatingReader を使用してチェックすることができるのですね。

    XML Editor にスキーマを読み込ませてチェックや補完する方法については、これから調べてみます。

    2010年2月1日 9:49