我有一个用例,我需要从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只会检查字符串是否为空格...
非常欢呼,
格雷厄姆
答案 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();
}