c# – XmlReader异常处理 – IEnumerable

c# – XmlReader异常处理 – IEnumerable,第1张

概述我正在读一个非常大的 XML文件,我必须将其作为流读取,如下所示: public IEnumerable<something> GetStuff(){ foreach(var gzipStream in GetGZips()) { using (var reader = XmlReader.Create(gzipStream, new XmlReaderSetti 我正在读一个非常大的 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;}

您应该处理其他可能的例外情况,但不确定您是否正在处理调用它的地方.它不优雅,但后来我不确定你的限制是什么(例如,没有预处理)

总结

以上是内存溢出为你收集整理的c# – XmlReader异常处理 – IEnumerable全部内容,希望文章能够帮你解决c# – XmlReader异常处理 – IEnumerable所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存