【发布时间】:2012-03-01 16:47:04
【问题描述】:
我想读取一个相当大的 xml 文件。它足够小以适合内存,但仍然非常大。在读取 XML 时,它会根据 XSD 进行验证。但是,这并不能防止在系统中使用读取的数据进行进一步操作时发生业务错误。当发生此类业务错误时(在 XSD 验证之后),我希望能够描述 行号 和 列号 用于我的 xml 中元素的开始和结束位置。此外,在这种情况下,显示从文件中读取的 输入 xml 将是用户友好的。
使用 xsd.exe 我已经生成了所有数据类的代码,并使用
using (var reader = new StringReader(content))
{
var errors = new List<string>();
var settings = new XmlReaderSettings();
settings.Schemas.Add("urn:import-schema", "Import.xsd");
settings.ValidationEventHandler += (o, args) => errors.Add(args.Message);
settings.ValidationType = ValidationType.Schema;
using (XmlReader xr = XmlReader.Create(reader, settings))
{
var xs = new XmlSerializer(typeof(ImportRoot));
var result = (ImportRoot) xs.Deserialize(xr);
if (errors.Any())
throw new Exception(string.Join("\n\n", errors));
return result;
}
}
}
但是,我似乎无法找到我正在寻找的元信息。我也检查了XDocument 类。这里的元素似乎有一个Value 属性,它是一个字符串。但这还不是我想要展示的全部信息。
【问题讨论】:
标签: c# xml xml-serialization xml-parsing