LINQ to XML:XML命名空間與元素識別名稱

如果要將XML文件內容建立在一個命名空間,則需另外透過 XNamespace 產生所需的 XName 物件,在「XDocument & XElement 簡述」這篇文章中,直接以 string 型態的字串為參數取代 XName 建立所需的  XElement 物件,如果沒有其他額外的考量,這種作法非常方便,字串會自動被轉換成為 XName 型態的物件,但是它沒有辦法讓我們處理 XM L命名空間的問題。

命名空間的存在增加了應用程式處理 XML 文件的複雜度,還有衍生的字首問題。由於命名空間名稱相當的冗長,開發人員可以自行指定特定的字首對應至某個命名空間,如此一來,將進一步複雜化應用程式中的XML文法,LINQ to XML 的 XNamespace 類別針對這些問題進行了簡化,此類別封裝一個命名空間字串,它是一個 sealed 型態的類別,無法進一步被繼承,以下列舉其定義:

public sealed class XNamespace

它沒有提供建構式,只要將命名空間字串指定給它即可,例如以下這一行程式碼,以指定的URI建立一個相關的XNamespace物件。

XNamespace kt = "http://kangting.tw" ;

有了這個命名空間物件,接下來便能透過它將一個指定的元素建立於此命名空間,例如以下的程式碼:

XNamespace kt = "http://kangting.tw" ;
XElement xElement = new XElement(kt+"ChildElement", "ChildElementContent") ;

引用  XNamespace 的 Addition 運算子,將 XNamespace 物件 kt 與字串 ChildElement 結合產生一個新的 XName 物件傳入 XElement 建構式,最後將一個新的 XML 元素被建立於命名空間 http://kangting.tw 。以下來看一個小例子:


其中一開始的<Books>標籤指定了 xmlns 屬性值,程式碼如下:

namespace CreateXMLContentNM
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
 private void Form1_Load(object sender, EventArgs e)
 {
    XNamespace xnm = "http://kangting.tw";
    XElement Books = new XElement(xnm + "Books",
new XElement(xnm + "Book",
    new XElement("BookTitle","Photoshop CS3 影像創造力基礎講堂"),
    new XElement("BookISBN", "978-986-6761-21-8"))
);
XMLRichTextBox.Text = Books.ToString();
}
}

不需要直接面對命名空間的內容,以物件存取的方式作處理即可,另外這裏運用了 XNamespace 類別的 Addition ,這個運算子覆寫了「+」的功能,定義如下:

public static XName operator +(
XNamespace ns,
string localName
) 

它會將兩個 XNamespace 物件與字串進行合併,然後轉換成為XName物件回傳,因此透過 Addition 運算子即可建立一個指定了特定命名空間的 XML 元素,將上述範例建構式中的第一個參數內容獨立出來。有了命名空間的概念,現在我們進一步來看看 XName 這個類別,它代表了一個 XML 名稱,用來識別特定的 XML 元素,由命名空間與區域名稱所組成,如下式:

XNamespace xnm = "http://kangting.tw";
XName xn = xnm + "Books";

在「XDocument & XElement 簡述」這篇文章中,透過XNamespace的Addition運算子所建立的即是將這兩個部分結合起來所產生的,一個封裝元素名稱資料訊的XName物件。

XName 類別沒有建構式,它透過名稱字串的指定,自動轉換產生所需的實體物件,直接將一個字串指定給XElement建構式的原因,或是經由XNamespace類別的Addition運算子合併命名空間的XName物件。

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:元素存取與轉換 



沒有留言: