c# – XmlReader异常处理 – IEnumerable
发布时间:2020-12-15 21:56:26 所属栏目:百科 来源:网络整理
导读:我正在读一个非常大的 XML文件,我必须将其作为流读取,如下所示: public IEnumerablesomething GetStuff(){ foreach(var gzipStream in GetGZips()) { using (var reader = XmlReader.Create(gzipStream,new XmlReaderSettings{ CheckCharacters = false }))
我正在读一个非常大的
XML文件,我必须将其作为流读取,如下所示:
public IEnumerable<something> GetStuff() { foreach(var gzipStream in GetGZips()) { using (var reader = XmlReader.Create(gzipStream,new XmlReaderSettings{ CheckCharacters = false })) { reader.MoveToContent(); while (reader.Read()) //<-- Exception here { //Do stuff yield return something; } } } } 我得到一个无效的char异常,处理过程中的一部分: ' ',hexadecimal value 0x19,is an invalid character. Line 655,position 45. 鉴于你不允许在try-catch中产生回报 – 在出现错误的情况下,简单地中止当前Xml doc(并完成枚举)的处理有什么好方法? try / finally并不好 – 因为异常打破了整个IEnumerable的处理. 我无法对文件执行任何预处理. 解决方法
如果你真的无法进行任何预处理,并且绝对必须在解析XML时生成枚举,那么如果用以下内容替换while循环怎么办?
bool IsMoreXml = true; while (IsMoreXml) { var ValuesRead = null; //not sure what you're reading try { IsMoreXml = reader.Read(); if(!IsMoreXml) break; //Do Stuff ValuesRead = whateverwereadfromxml; } catch (XmlException ex) { //do what you gotta do break; } if(ValuesRead != null) yield return ValuesRead; } 您应该处理其他可能的例外情况,但不确定您是否正在处理调用它的地方.它不优雅,但后来我不确定你的限制是什么(例如,没有预处理) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |