0

次のようなコードを修正する必要があります。

XmlDocument XmlFoo = null;

try{
    SomeUntrappedWCFCalls();
    SomeUntrappedStringParsing();
    SomeUntrappedXMLParsing();
    ..
    XmlFoo = new XmlDocument();
    XmlFoo.LoadXml(SomeXml);
    ..
    SomeUntrappedWCFCalls();
    SomeUntrappedStringParsing();
    SomeUntrappedXMLParsing();
}
(Exception ex){

      CodeThatDealsWithPartOfTheExceptionsRaisedAbove(); 
      ..
      //Need to check if the LoadXml() went wrong
      ..
      CodeThatDealsWithPartOfTheExceptionsRaisedAbove();
}

例外処理セクション(*)を適切にチェックするにはどうすればよいXmlFooですか?XmlDocumentLoadXml()

2 つの制約があります。

  1. すべてのエラー処理が例外コード内で処理されるため、LoadXML()内部をラップすることはできません。XmlException
  2. XmlExceptionXmlFooの解析の前後に解析される他のXmlファイルがあるため、一般的な例外の直前に作成できません。

次のような方法でノードの数をカウントするのは、安全で洗練されていない回避策ですか。

if (XmlFoo.ChildNodes.Count == 0){..

LoadXML()または、何らかの方法で解析ステータスを確認するために他の変数が必要ですか?

4

3 に答える 3

2

あなたの恐ろしい制約を考えると、最もクリーンなソリューションは次のようになります。

bool parsingAttempted = false;
bool parsingSucceeded = false;
try
{
    XmlFoo = new XmlDocument();
    parsingAttempted = true;
    XmlFoo.LoadXml(SomeXml);
    parsingSucceeded = true;
}

これで、次の 3 つの状況を確認できます。

  • 解析が試行される前のエラー: parsingAttemptedfalse
  • 解析中のエラー: parsingAttemptedtrue、parsingSucceededfalse
  • 解析成功: parsingSucceededtrue
于 2013-04-30T16:02:48.253 に答える
1

ここでは推測にすぎませんが、Jon Skeet とのコメントを読んだ後、次のような簡単なことが役立つかもしれません。

XmlDocument XmlFoo = null;
bool loading = false;
try{
    ..
    XmlFoo = new XmlDocument();
    loading = true;
    XmlFoo.LoadXml(SomeXml);
    loading = false;
    ..
}
catch (Exception ex){

   if(loading)
   {
      //something went wrong while loading XML
   }   .. 
}
于 2013-04-30T15:37:24.693 に答える
0

XmlException をキャッチできない理由がわからない場合は、次を参照してください。

XmlDocument XmlFoo = null;

try
{
    XmlFoo = new XmlDocument();
    XmlFoo.LoadXml(SomeXml);
}
(XmlException ex)
{
    // Loadxml went wrong
}
(Exception ex)
{
    // Some other Error
}

または、次を使用することもできます。

XmlDocument XmlFoo = null;

try
{
    XmlFoo = new XmlDocument();
    XmlFoo.LoadXml(SomeXml);
}
(Exception ex)
{
    if(ex is XmlException)
        // LoadXml Error
    else
        // Some other Error
}
于 2013-04-30T15:10:20.970 に答える