优雅地处理从空文件加载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只会检查字符串是否为空白…
长久地欢呼,格雷厄姆
嗯,最简单的方法可能是首先通过将整个文件读入字符串(我假设它不是太大)来确保它不是空白:
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();
}