优雅地处理从空文件加载XElement

时间:2011-07-26 01:00:10

标签: c# xml

我有一个用例,我需要从XML文件中读取一些信息并相应地对其进行操作。问题是,这个XML文件在技术上允许为空或满空白,这意味着“没有信息,什么都不做”,任何其他错误都应该很难。

我目前正在考虑以下方面:

    public void Load (string fileName)
    {
        XElement xml;
        try {
            xml = XElement.Load (fileName);
        }
        catch (XmlException e) {
            // Check if the file contains only whitespace here
            // if not, re-throw the exception
        }
        if (xml != null) {
            // Do this only if there wasn't an exception
            doStuff (xml);
        }
        // Run this irrespective if there was any xml or not
        tidyUp ();
    }

这种模式看起来不错吗?如果是这样,人们如何建议实现检查文件是否只包含catch块内的空格? Google只会检查字符串是否为空格...

非常欢呼,

格雷厄姆

1 个答案:

答案 0 :(得分:2)

嗯,最简单的方法可能是首先确保它不是空格,首先将整个文件读入一个字符串(我假设它不是太大):

public void Load (string fileName)
{
    var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
    var reader = new StreamReader(stream, Encoding.UTF8, true);
    var xmlString = reader.ReadToEnd();

    if (!string.IsNullOrWhiteSpace(xmlString)) {  // Use (xmlString.Trim().Length == 0) for .NET < 4
        var xml = XElement.Parse(xmlString);    // Exceptions will bubble up
        doStuff(xml);
    }

    tidyUp();
}