LINQ to XML:XDocument & XElement 簡述

操作 X M L 有兩個主要的目標-XML 文件與構成 XML 內容的元, XDocument 以及 XElement 這兩個類別被設計用於封裝相關的資訊,同時提供所需的功能成員。

XDocument 是一個實體類別,它代表一個 XML Infoset 文件實體,我們可以透過指定特定的物件參數,建立包含此內容的 XDocument ,其建構式如下:

public XDocument(
    Object[] content
)

XDocument建構式接受一個Object型態的陣列物件,表示你可以將非特定型態的物件當作參數傳入,建立所需的XDocument實體,被用來當作參數的物件,通常包含XElement、XComment或是XDeclaration等等。

最簡單的 XDocument 沒有任何內容,換句話說,你可以透過預設建構式建立一個空白內容的 XDocument 物件,然後經由相關方法的引用,逐步建立其中的XML元素,或是直接以所要建立的XML文件架構為基礎,透過上述的建構式,憑空建立一份文件。

在一般的情形下,通常我們不會使用 XDocument 建立XML文件實體,取而代之的,是透過 XElement 進行各種與 XML 有關的元素操作。 XDocument 用來表示一個特定的文件,除非你有需要,否則針對XML內容架構的操作,直接建立代表特定元素的 XElement 物件是比較合適的選擇。

命名空間 System.Xml.Linq 的眾多類別中, XElement 是探索 LINQ to XML 一個非常好的起點,這個類別代表一個 XML 元素,它提供了非常多的方法用來建構與操作XML文件的內容,這是一個實體類別,直接建立其物件實體即可引用其內建的相關功能操作XML。XElement 可以讓我們憑空建立一個新的 XML 文件內容,建構式如下:

建構式說明
XElement(XElement)以另外一個 XElement 實體物件為基礎,初始化建立 一個新的 XElement 類別實體。
XElement(XName)以指定的名稱為基礎,初始化建立一個新的 XElement 類別實體。
XElement(XStreamingElement)以指定的XStreamingElement物件,初始化建立一 個新的 XElement 類別實體。
XElement(XName, Object)以指定的名稱與物件內容,初始化建立一新的 XElement 類別實體。
XElement(XName, Object [])以指定的名稱與物件列內容 , 初始化建立一個新的 XElement 類別實體。

透過表列的建構式,利用 XElement、XName與XStreamingElement等類別物件即可建立一個 XElement 實體物件,然後建立 XML 文件。先來看底下這個版本的建構式,它接受兩個參數:

public XElement(
    XName name,
    Object content
)

第一個參數 name 是一個 XName 類別,它代表了XML 元素的名稱,第二個參數則是 Object 型別的物件,表示 XML 元素的內容,由於是 Object 型態,因此它具有非常大的彈性,可以接受各種不同型別的物件。引用這個建構式,通常我們會輸入一個當作元素名稱的字串作為第一個參數,這個字串會經過一個隱含轉換將其轉換成為 XName 型別,例如以下這一行程式碼:

XElement xElement = new XElement("ChildElement", "ChildElementContent") ;

其中建立一個名稱為 ChildElement 、內容為字串 ChildElementContent 的XML元素。另外,你也能夠以new關鍵字即時建立一個新的 XElement 物件,將其當作物件傳入,如下式:

public XElement(
    XElement other
)

如你所見,它非常的簡單,只要將 XElement 物件 other 加入即可。有了 XElement ,我們就可以建立所需的XML內容,如果是整份文件,則以上述一開始所討論 XDocument 為基礎封裝 XElement 物件即可,讓我們來看一個範例。這個範例於表單載入的時候,以即時建立的 XElement 物件實體為參數,建立一個 XDocument 物件 ,然後將其內容顯示在畫面上。


以下為程式碼:

public partial class Form1 : Form
{
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {

              XDocument xDoc = new XDocument(
                new XElement("Books",
                    new XElement("Book",
                        new XElement("BookTitle",
                        "Photoshop CS3 影像創造力基礎講堂"),
                        new XElement("BookISBN", "978-986-6761-21-8")),
                    new XElement("Book",
                        new XElement("BookTitle",
                        "MAYA 火星講堂"),
                        new XElement("BookISBN", "978-986-6761-19-5")),
                    new XElement("Book",
                        new XElement("BookTitle",
                    "手繪魅力100%  Photoshop+Wacom  "),
                        new XElement("BookISBN", "978-986-6761-17-1")))
                 );
            XMLRichTextBox.Text = xDoc.ToString();
        }
 }

其中引用 XDocument 建構式,建立一個新的 XElement 物件,逐步擴展其內容,完成一份簡單的 XML 文件。請自行比對程式碼的內容,以及上述結果畫面所輸出的XML文件,以此種方式建立XML文件相當直觀,它與最後輸出的XML文件結構相同。

LINQ to XML:XDocument & XElement 簡述 
LINQ to XML:關於 LINQ to XML 
LINQ to XML:XML命名空間與元素識別名稱 
LINQ to XML:XML內容元素 
LINQ to XML:XML文件載入與輸出 
LINQ to XML:載入 XML 內容 
LINQ to XML:輸出XML文件 
LINQ to XML:列舉XML元素 
LINQ to XML:存取特定XML元素 
LINQ to XML:新增XML元素 
LINQ to XML:元素屬性 
LINQ to XML:利用LIQN萃取XML文件內容元素 
LINQ to XML:元素存取與轉換 



沒有留言: