C#.NET解析XML(使用屬性控制 XML 序列化)


今天需要解析一個XML,這個XML和一般情況用.NET的序列化出來的格式不太一樣。

我就又補習了一下。

分享一下學習成果吧。

示例代碼下載:

http://download.csdn.net/detail/bdstjk/4028340

先給大家看看基礎知識吧,后面再給大家貼一個復雜實例

 

使用屬性可以控制對象的 XML 序列化。

默認情況下,XML 元素名稱由類或成員名稱確定。在名為 Book 的簡單類中,字段 ISBN 將生成 XML 元素標記 <ISBN>,如下面的示例所示。


若要重新命名元素,可以更改這種默認行為。下面的代碼演示屬性 (Attribute) 如何通過設置 XmlElementAttribute 的 ElementName 屬性 (Property) 實現此目的。

 

XmlArrayAttribute 和 XmlArrayItemAttribute 屬性旨在用於控制數組的序列化。使用這些屬性可以控制元素名稱、命名空間以及 XML 架構 (XSD) 數據類型(在萬維網聯合會 [www.w3.org] 文檔“XML 架構第 2 部分:數據類型”中進行了定義)。此外,還可以指定數組所能包含的類型。

對於序列化數組時生成的封閉 XML 元素,其屬性將由 XmlArrayAttribute 確定。例如,默認情況下,序列化下面的數組時,將會生成名為Employees 的 XML 元素。Employees 元素將包含在數組類型Employee 之后命名的一系列元素。


序列化實例可能如下所示。

 

通過應用 XmlArrayAttribute,可以按照以下方式更改 XML 元素的名稱。

 

生成的 XML 可能如下所示。

 

另一方面,XmlArrayItemAttribute 可以控制如何序列化數組中包含的項。請注意,該屬性將應用於返回數組的字段。

 

生成的 XML 可能如下所示。


 

序列化派生類

XmlArrayItemAttribute 的另一種用法是,允許序列化派生類。例如,可將派生自 Employee 的另一個名為Manager 的類添加至上一示例中。如果沒有應用XmlArrayItemAttribute,代碼將在運行時失敗,原因是無法識別派生類類型。若要解決這個問題,每次為每個可接受類型(基類和派生類)設置 Type 屬性 (Property) 時,需要應用該屬性 (Attribute) 兩次。


 

序列化實例可能如下所示。

將數組作為元素序列進行序列化

通過將 XmlElementAttribute 應用於返回數組的字段,還可以將該數組作為 XML 元素的平面序列進行序列化,如下所示。


 

序列化實例可能如下所示。


 

區別兩種 XML 流的另一個方法是,使用 XML 架構定義工具,從編譯好的代碼生成 XML 架構 (XSD) 文檔文件。沒有將屬性應用於字段時,架構會以下列方式描述元素。

 
<xs:element minOccurs="0" maxOccurs ="1" name="Employees" type="ArrayOfEmployee" />

XmlElementAttribute 應用於字段時,生成的架構會以下列方式描述元素。

   
<xs:element minOccurs="0" maxOccurs="unbounded" name="Employees" type="Employee" /> 

序列化 ArrayList

ArrayList 類可能包含各種不同對象的集合。因此,可以按照使用數組的類似方式使用 ArrayList。您可以創建返回單個ArrayList 的字段,而不用創建返回類型化對象的數組的字段。但是,與數組相同的是,必須將ArrayList 包含的對象的類型告知 XmlSerializer。為此,需要為該字段分配XmlElementAttribute 的多個實例,如下面的示例所示。


 

使用 XmlRootAttribute 和 XmlTypeAttribute 控制類的序列化

能且只能應用於一個類的屬性有下面兩種:XmlRootAttribute 和 XmlTypeAttribute。這兩種屬性非常相似。XmlRootAttribute 只能應用於一個類:序列化時,該類表示 XML 文檔的開始和結束元素,也就是根元素。另一方面,XmlTypeAttribute 可以應用於任何一個類,包括根類。

例如,在上面的示例中,Group 類就是根類,而其所有的公共字段和屬性變成 XML 文檔中的 XML 元素。因此,只能有一個根類。通過應用XmlRootAttribute,可以控制XmlSerializer 所生成的 XML 流。例如,可以更改元素名稱和命名空間。

使用 XmlTypeAttribute 可以控制所生成 XML 的架構。需要通過 XML Web services 發布架構時,這項功能很有用。下面的示例將XmlTypeAttributeXmlRootAttribute 同時應用於同一個類。


 

如果對該類進行編譯,並且使用 XML 架構定義工具生成其架構,可能會找到下面描述 Group 的 XML。

<xs:element name="NewGroupName" type="NewTypeName">

相比之下,如果是對該類的實例進行序列化,則只能在 XML 文檔中找到 NewGroupName

<NewGroupName> . . .</NewGroupName>

 

 

最后來貼一個自己的XML解析實例

XML結構如下:


 

 

實例

C#代碼如下:

代碼有點多


 http://write.blog.csdn.net/postedit/7210742

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM