c#
  • xsd
  • event-log
  • xmlserializer
  • 2012-03-21 29 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

    相关问题