微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – XmlReader异常处理 – IEnumerable

我正在读一个非常大的 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;
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐