如何在不使用XmlException的情况下检查XmlDocument实例上的LoadXml()是否出错
本文关键字:实例 LoadXml 出错 是否 XmlDocument 情况下 XmlException 检查 | 更新日期: 2023-09-27 18:11:27
我必须修复一些代码,看起来像这样:
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
是XmlDocument
的新实例,但LoadXml()
出错了加载/解析错误?
我有两个约束:
- 我不能在
XmlException
中包装LoadXML()
,因为所有的错误处理都在Exception代码中处理。 - 我不能在一般异常之前创建
XmlException
,因为在XmlFoo解析之前和之后解析了其他Xml文件。
仅仅计算节点的数量是一种安全而不优雅的解决方法吗?
if (XmlFoo.ChildNodes.Count == 0){..
或者我是否需要一些其他变量以某种方式检查LoadXML()
解析状态?
考虑到您可怕的约束条件,我认为最干净的解决方案是:
bool parsingAttempted = false;
bool parsingSucceeded = false;
try
{
XmlFoo = new XmlDocument();
parsingAttempted = true;
XmlFoo.LoadXml(SomeXml);
parsingSucceeded = true;
}
现在你可以检查三种情况:
- 解析前错误:
parsingAttempted
是false - 解析错误:
parsingAttempted
为真,parsingSucceeded
为假 - 解析成功:
parsingSucceeded
为真
我只是猜测,但在阅读了您与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
} ..
}
不知道为什么不能捕获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
}