程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> LINQ學習筆記:X-DOM概覽

LINQ學習筆記:X-DOM概覽

編輯:關於.NET

X-DOM概覽

X-DOM的核心類型. XElement是所有這些類型當中最常用的. XObject是整個繼承體系中的根源; XElement和XDocument是整個箱體層級的根.

考察下面的代碼:

   1: string XML =
   2: @"<customer id='123' status='archived'>
   3:   <firstname>Joe</firstname>
   4:   <lastname>Bloggs<!--nice name -></lastname>
   5: </customer>";
   6:
   7: XElement customer = XElement.Parse (XML);

XObject是所有XML內容的抽象基類. 它定義了一個指向父元素的連接以及一個可選的XDocument.

XNode是除開屬性(attributes)之外的多數XML內容的基類. 一個區別就是XNode可以處理一個有序的混合類型的XNode的集合, 考慮下面的XML片段:

   1: <data>
   2:   Hello world
   3:   <subelement1/>
   4:   <!--comment-->
   5:   <subelement2/>
   6: </data>

在父元素<data>裡面, 第一個節點是一個XText(Hello world), 接著是一個XElement節點, 然後是一個XComment節點, 最後是另外的一個XElement節點. 相反的, 一個XAttribute只能配對出現.

雖然一個XNode能夠訪問它的父元素, 但它並沒有子節點的概念; 這是它的子類型XContainer的工作. XContainer定義了一些用於處理子節點的成員並且它也是XElement和XDocument的抽象基類.

XElement引入了一些管理attributes的成員例如Name和Value. 對於那種元素只擁有一個單一的XText子節點的情況, Value屬性可以讀取或者設置子節點的內容, 而不再需要不必要的導航. 感謝Value, 大多數情況下你可以避免和XText節點直接打交道.

XDocument表示一棵XML樹的根. 更精確的說, 它包裝了根元素, 增加了一個XDeclaration, 處理指令, 以及其它的根級別的相關操作. 不像W3C DOM, 它的使用是可選的, 你甚至可以在沒有創建XDocument的時候加載, 操作, 或者保存一個X-DOM. 對於XDocument的非依賴意味著你可以高效而簡易的將一個字節點樹移到另外一個X-DOM層級上面.

加載與解析

XElement與XDocument兩者都提供了靜態Load和Parse的方法從一個已存在的數據源中來構建一棵X-DOM樹.

  • Load從文件, URI, TextReader或者XMLReader創建X-DOM
  • Parse從一個string創建了X-DOM

XNode也提供了一個ReadFrom的靜態方法, 該方法實例化來自於XmlReader的任何節點類型. 不像Load, 它讀取了一個節點之後就立即停止, 你可以通過手動讀取XmlReader來繼續進行處理. 另外你也可以反向操作, 使用一個XmlReader(CreateReader)或者XMLWriter(CreateWriter)來讀/寫一個XNode.

例如:

   1: XDocument fromWeb = XDocument.Load
   2:   ("http://albahari.com/sample.XML");
   3:
   4: XElement fromFile = XElement.Load
   5:   (@"e:mediasomefile.XML");
   6:
   7: XElement config = XElement.Parse (
   8: @"<configuration>
   9:     <clIEnt enabled='true'>
  10:       <timeout>30</timeout>
  11:     </clIEnt>
  12:   </configuration>");

保存與序列化

在任何節點上調用ToString都會將其內容轉換成一個XML字符串-該字符串就像我們看到的那樣已經被斷行符格式化過了.(我們還可以在調用ToString的時候指定SaveOptions.DisableFormatting, 這樣將禁用格式化斷行符)

同時XElement和XDocument也提供了一個Save方法用於將一個X-DOM寫入到文件中, TextWriter 或者 XmlWriter. 如果你選擇了使用文件, 那麼XML declaration將會被自動寫入. 另外XNode也包含了一個WriteTo的方法, 其接收一個XMLWriter參數.

待續!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved