LINQ to XML:新增與刪除 XML 元素

XElement類別提供幾個新增節點的方法成員,將指定的節點加入至XML樹狀架構當中,相關的方法有四個,名稱均以Add為開頭:

方法說明
Add 加入指定的內容做為此 XContainer 的子系。
AddFirst 加入指定的內容,以當做此文件或項目的第一個子系。
AddAfterSelf 將指定的內容加入緊接在此節點後面的位置。
AddBeforeSelf 將指定的內容加入緊接在此節點前面的位置。

這四個方法都能夠讓你將一個指定的XElement加入至目前的XML文件結構當中,不過加入至XML樹狀架構中的位置不太一樣,最簡單的Add成員定義如下:

public void Add(
Object content
)
public void Add(
Object[] content
)

Add方法有兩個不同的版本,分別接受單一物件以及陣列型態的物件,然後將這些物件加入至目前的XML內容之中。如果要將新增的元素,插入至目前內容一開始的位置,則必須引用AddFirst這個方法,這個方法會將指定的元素當作第一個元素,新增至目前的XML文件當中。以下為其定義:

public void AddFirst(
Object content
)
public void AddFirst(
Object[] content
)

AddFirst同樣有兩個覆寫的版本,意義同上述的Add方法。現在考慮以下的 XML文件:

<Books>
  <Book>
    <BookTitle>HTML5從零開始</BookTitle>
    <BookISBN>000-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>HTML5完美風暴</BookTitle>
    <BookISBN>111-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>LINQ精要剖析</BookTitle>
    <BookISBN>222-000-000-00-0</BookISBN>
  </Book>
</Books>

假設建立一個新的元素 newXEle :

XElement newXEle = new XElement("Book",
new XElement("BookTitle", "ASP.NET MVC HTML5 完美演繹"),
    new XElement("BookISBN", "222-000-000-00-0"));

調用Add() 方法如下:

xEleBook.Add(newXEle);

會得到以下的結果,紅色為加入的部份:

<Books>
  <Book>
    <BookTitle>HTML5從零開始</BookTitle>
    <BookISBN>000-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>HTML5完美風暴</BookTitle>
    <BookISBN>111-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>LINQ精要剖析</BookTitle>
    <BookISBN>222-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>ASP.NET MVC HTML5 完美演繹</BookTitle>
    <BookISBN>222-000-000-00-0</BookISBN>
  </Book>
</Books>

如果調用 AddFirst() 如下:

xEleBook.AddFirst(newXEle);

會出現以下的結果,紅色為加入的部份:

<Books>
  <Book>
    <BookTitle>ASP.NET MVC HTML5 完美演繹</BookTitle>
    <BookISBN>222-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>HTML5從零開始</BookTitle>
    <BookISBN>000-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>HTML5完美風暴</BookTitle>
    <BookISBN>111-000-000-00-0</BookISBN>
  </Book>
  <Book>
    <BookTitle>LINQ精要剖析</BookTitle>
    <BookISBN>222-000-000-00-0</BookISBN>
  </Book>
</Books>

另外的 AddAfterSelf 與 AddBeforeSelf 這兩個方法,同樣執行新增元素的動作,只是它們以指定的元素節點為依據,前者將新的元素加入其之前的位置,後者則是加入其之後的位置。同樣具有兩個多載版本,分別接受 Object 與 Object[] 型態物件參數。

如果要刪除元素,引用方法RemoveAll會移走目前XElement的所有內容與屬性,我們來看看它的定義:

public void RemoveAll()

這個方法並沒有任何的參數,直接對其進行引用即可,一旦執行完畢,XElement的所有內容將被全部移除,只剩下最頂層的元素標籤。假設以下是一個XElement物件xElement的內容:

<Root Attr1="1" Attr2="2" Attr3="3" …>
    <Child1>1</Child1>
    <Child2>2</Child2>
    <Child3>3</Child3>
      …
</Root>

如果執行以下這一行程式碼,其中的內容將被清空。

xElement.RemoveAll();

最後將得到以下的結果:

<Root />

如果想要刪除某個特定元素,則必須先找到此元素,然後引用Remove方法即可。

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


沒有留言: