2017-06-07 100 views
0

爲了儘量減少讀取錯誤日誌所用的時間,我創建了以下小插件,它將解析Elmah錯誤日誌中包含的相關信息,並最終生成Excel電子表格。目前我正在使用WriteLine進行測試。我面臨的問題是,在第二個foreach循環內,我在每個node.attribute項目中都看到一個空引用異常。此代碼的預期結果是從每個XML文檔的<error>標記中生成一個「屬性」值列表。使用控制檯應用程序解析Elmah錯誤日誌

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的節點值被返回沒有 「HasAttributes」

+0

線'串XML被替換= 「」;'應替換爲'string xml = File.ReadAllText(exception.FullName));' –

+0

@JamesCurran這很好。請允許我請您將其設置爲答案,以便我可以接受它? – jpears

+0

我期待着你說「這條線只是爲了這個例子,我用真實的代碼閱讀了這個文件」。然後我會說「然後用文件中的一些實際片段替換」 –

回答

1

string xml = "<error></error>";應與string xml = File.ReadAllText(exception.FullName));

相關問題