我有一个非常大的xml文件(假设它有大约300000个元素)。在我的应用程序中,我只需要知道根元素的名称是ApplicationLog
以及根元素中是否有一个名为LogId
的属性。
要阅读我使用的XML:
XDocument document;
using (StreamReader streamReader = new StreamReader(filePath, true))
{
document = XDocument.Load(streamReader);
}
并获取我需要的信息:
try
{
if (document.Root != null)
{
if (string.Equals(document.Root.Name.LocalName, "ApplicationLog", StringComparison.InvariantCultureIgnoreCase) &&
document.Root.HasAttributes && (from o in document.Root.Attributes() where string.Equals(o.Name.LocalName, "LogId", StringComparison.InvariantCultureIgnoreCase) select o).Any())
{
isRelevantFile = true;
}
}
}
catch (Exception e)
{
}
这很好用。
问题是XDocument.Load
加载大约20MB的XML文件大约需要15秒。
我也尝试了XmlDocument
,但我遇到了同样的问题。
我对解决方案的第一个想法是将文件作为文本读取并解析搜索到的元素/属性的第一行。但这对我来说似乎并不那么专业。
有人知道更好的方法吗?