【发布时间】:2018-01-20 16:59:03
【问题描述】:
确定导致异常的确切原因并纠正它的正确方法是什么?
考虑下面的代码。我尝试解析 XML 字符串,但有时传入的 XML 不是顶级的,这意味着它需要被根元素包围。
如果发生这种情况,解析器会抛出一个XmlException,但它可能会因为很多原因而抛出它。我想了解这一个特定的原因。
我这样做,我承认这可能不是很好:
var doc = new XmlDocument();
try
{
doc.LoadXml(xml);
}
catch(XmlException e)
{
if(e.Message.Contains("multiple root elements"))
{
doc.LoadXml($"<root>{xml}</root>");
}
else
{
throw e;
}
}
这感觉就像一个黑客。这样做的正确方法是什么?
【问题讨论】:
-
xml是哪里来的?
-
看例子here
-
您可以使用 XmlException.Data 获取更多详细信息
-
@KhalilLazhar,很奇怪,每次我得到 any 异常时,Data 属性都是空字典...我想我从未见过填充 Data 属性的系统异常.. . :(
-
您重新抛出异常的方式会清除堆栈跟踪。不是理想的情况。字符串解析也不是异常消息。这里有两篇关于正确异常处理的好文章,我链接了很多:blogs.msdn.com/b/ericlippert/archive/2008/09/10/…codeproject.com/Articles/9538/… 很可能,这任何 XML Excpetion 都是外生异常。所以详细解析它们并不是你的工作。
标签: c# xml xmldocument