我正在使用的系统DataSet.ReadXml(XmlReader)
用于读取 XML 文件并将其内容加载到DataSet
. XML 文件来自业务合作伙伴,可能并不总是格式正确,但该系统预计会对输入执行合理的更正。
我们在 XML 输入文件中看到了错误,例如:
- 情况1:在字符串值中间,使用了, 或者我最喜欢的, 等字符
'<'
,'>'
导致'&'
“解析EntityName时出错。行x,位置y。 ” - 案例 2:在字符串值的中间,奇怪的构造,例如
"<3"
,文本描绘了一颗心,这导致“名称不能以 '3' 字符开头。行 x,位置 y。 ” - 情况 3:给定编码的字符无效,导致“给定编码中的字符无效。第 x 行,位置 y。 ”
如果采用一些简单的规则,则可以通过编程方式解决这些错误:
- 情况 1:将违规字符替换为其 XML 字符实体(
"&"
变得"&"
等) - 情况2:把
"<"
in"<3"
换成空格,这样就变成了" 3"
- 案例3:用空格替换无效字符
但是,所有这些错误都会引发相同的异常:System.Xml.XmlException
当遇到任何这些错误时,我想采取适当的措施,但最好的方法是什么?这三个不同的错误都具有相同的HRESULT
值(-2146232000),到目前为止,我能够区分它们的唯一方法是检查XmlException.Message
字符串属性。
字符串比较似乎是确定错误确切原因的糟糕方法。如果我遵循这种方法,那么如果异常消息在未来版本的 .NET 中发生更改,代码就会中断。它也不能移植到某些语言。
因此,如何以编程方式区分可以在 中表示的各种类型的错误XmlException
?
编辑
在下面的评论中,我收到了关于确保 XML 数据高质量的重要性的建议。我不反对,但正如我的问题所述,这超出了我的控制范围,我对此无能为力。所以,尽管你的言论是善意的,但他们没有抓住重点。如果您知道区分课堂上可能出现的许多错误的好方法System.Xml.XmlException
,请分享您的知识。谢谢你。