使用控制台应用程序解析Elmah错误日志

时间:2017-06-07 20:50:02

标签: c# xml linq xml-parsing

为了尽量减少阅读错误日志所花费的时间,我创建了以下小插件,该插件将解析Elmah错误日志中包含的相关信息,并最终生成Excel电子表格。目前我正在使用WriteLine进行测试。我面临的问题是在第二个foreach循环内部,我在每个node.attribute项中看到一个空引用异常。此代码的预期结果是生成一个&#34;属性列表&#34;每个XML文档的<error>标记内的值。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;

namespace ExcelSortingAutomation
{
    public class Program
    {
        public static void Main(string[] args)
        {
            DirectoryInfo Exceptions = new DirectoryInfo("C:\\ErrorsMay2017");
            FileInfo[] ExceptionFiles = Exceptions.GetFiles("*.xml");

            foreach (var exception in ExceptionFiles)
            {
                string xml = "<error></error>";
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);


                foreach (XmlNode node in doc.SelectNodes("//error"))
                {
                    string errorId = node.Attributes["errorId"].Value;
                    string type = node.Attributes["type"].Value;
                    string message = node.Attributes["message"].Value;
                    string time = node.Attributes["time"].Value;
                    Console.WriteLine("{0} - {1} - {2} = {3}", errorId, type, message, time);
                }
            }
        }
    }
}

我的问题是,为什么应该通过这一点拉取和解析的日志没有收到属性值?

编辑1:仔细检查后,XmlNode节点值返回时没有&#34; HasAttributes&#34;

1 个答案:

答案 0 :(得分:1)

string xml = "<error></error>";应替换为string xml = File.ReadAllText(exception.FullName));