我試圖讀取保存爲從.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