c#
  • xsd
  • event-log
  • xmlserializer
  • 2012-03-21 35 views 1 likes 
    1
    保存爲XML格式的閱讀事件日誌

    我試圖讀取保存爲從.net/C#,事件日誌XML格式的外觀(約)這樣的XML文件的事件日誌:從.net

    <?xml version="1.0" encoding="utf-8" standalone="yes"?> 
    <Events> 
        <Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>...</Event> 
        <Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>...</Event> 
    </Events> 
    

    其中...位是在模式文件event.xsd中定義的相對複雜的一系列類型。

    我的計劃是使用XSD.exe生成一個C#包裝類型使用XmlSerializer類從這個模式文件中讀取此事件日誌XML,然後deserialise的XML,像這樣:

    using (FileStream stream = File.OpenRead(filename)) 
    { 
        XmlSerializer serialiser = new XmlSerializer(typeof(Events)); 
        return (Events)serialiser.Deserialize(stream); 
    } 
    

    麻煩的是,模式文件不包含Events元素的定義(因爲它不在模式中),所以上面不編譯,因爲沒有Events類型。

    我已經嘗試了幾種變體,包括使用EventType[]而不是Events(導致異常「不是預期的」)。我也試圖手藝我自己的C#集裝箱Events類型:

    public class Events 
    { 
        [XmlElement] 
        public EventType[] Items 
        { 
         get; 
         set; 
        } 
    } 
    

    但上述只是產生的Items陣列被空英寸

    如何從C#中讀取保存爲XML格式的事件日誌?

    +2

    爲什麼不直接使用LINQ to XML和XDocument?或者最糟糕的是,XmlDocument? – 2012-03-21 15:22:34

    +0

    @JohnSaunders我只是希望儘可能使用XSD生成的類來覆蓋'XmlDocument',但是如果我無法實現這個功能,這將成爲我重新使用的技術(我不喜歡使用元素名稱分散的代碼hard-編碼爲字符串時,我可以從一個定義的架構生成類) – Justin 2012-03-21 15:28:16

    +1

    什麼硬編碼的字符串?你的意思是XPath表達式和元素名稱?順便說一句,你有沒有嘗試過創建一個模式來表示實際的文檔結構?它會包含原始模式,但會定義「事件」元素。 – 2012-03-21 15:31:13

    回答

    2

    所以我設法這個使用下面的類:

    [Serializable] 
    [XmlType(AnonymousType = true)] 
    [XmlRoot(Namespace = "", IsNullable = false)] 
    public class Events 
    { 
        [XmlElement("Event", Namespace = "http://schemas.microsoft.com/win/2004/08/events/event")] 
        public EventType[] Items 
        { 
         get; 
         set; 
        } 
    } 
    

    我不能完全肯定它是什麼,做這項工作,以前失敗(我懷疑它的Namespace屬性),但是我發現這一點通過使用XSD.EXE產生從保存的事件日誌文件和架構,然後再從該文件中生成C#類,像這樣:

    ​​

    (因爲它輸出兩種XSD文件,你需要的名字他們都在命令行上)。然後,我查看了生成的C#並進行了比較/實驗,直到它工作。

    +0

    EventType從何而來? – jjxtra 2012-11-08 05:20:19

    +0

    @PsychoDad其中一個[事件類型](http://msdn.microsoft.com/en-us/library/windows/desktop/aa363662%28v=vs.85%29.aspx) – Justin 2012-11-08 07:40:09

    相關問題