我试图读取保存为从.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格式的事件日志?
为什么不直接使用LINQ to XML和XDocument?或者最糟糕的是,XmlDocument? – 2012-03-21 15:22:34
@JohnSaunders我只是希望尽可能使用XSD生成的类来覆盖'XmlDocument',但是如果我无法实现这个功能,这将成为我重新使用的技术(我不喜欢使用元素名称分散的代码hard-编码为字符串时,我可以从一个定义的架构生成类) – Justin 2012-03-21 15:28:16
什么硬编码的字符串?你的意思是XPath表达式和元素名称?顺便说一句,你有没有尝试过创建一个模式来表示实际的文档结构?它会包含原始模式,但会定义“事件”元素。 – 2012-03-21 15:31:13