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

本文关键字:加载 XElement 问题 文件 处理 | 更新日期: 2023-09-27 18:03:44

我有一个用例,我需要从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只会检查字符串是否为空白…

长久地欢呼,格雷厄姆

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

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

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();
}