XML(eXtensible Markup Language) 可擴展標記語言常作為各種資訊交換用的通訊格式,例如用於 SOAP 通訊協定,其豐富的描述讓資料資訊表達得更完整(當然資料本身也變得比較複雜些),.Net Team 提供了方便操作 XML 的工具 System.Xml.Linq 也就是 LINQ to XML,這篇介紹 LINQ to XML 的基本操作。

目錄:

系列文完整範例程式碼請參考 poychang/Demo-Linq-To-Xml

LINQ to XML 類別

常見的 LINQ to XML 類別如下圖:

常見的 LINQ to XML 類別

  • XDocument 代表整份 XML 文件
  • XDeclaration 代表 XML 宣告,告用於宣告 XML 版本與文件的編碼
  • XComment 代表 XML 註解
  • XElement 代表 XML 元素,內容可為資料或另一個 XML 元素
  • XAttribute 代表 XML 屬性

更多 LINQ to XML 類別請參考這份文件

基本操作

LINQ to XML 屬於記憶體內操作 XML 資料,因此在做任何操作前,都必須先載入 XML 資料至記憶體中,使用 XDocuments.Load() 進行載入 XML 檔案內容(文件):

// 載入 sample.xml 檔
XDocument xmlDocument = XDocuments.Load("sample.xml");

如果想透過字串來載入,可以使用 XDocument.Parse() 這個方法來處理(文件):

var content = @"
<?xml version=""1.0"" encoding=""utf-8"" standalone=""yes""?>
<Student Id=""101"">
    <Name>Mark</Name>
    <Gender>Male</Gender>
    <TotalMarks>800</TotalMarks>
</Student>";
XDocument xmlDocument = XDocuments.Parse(content);

取得節點內特定單一元素,可使用 Element(),若要取得節點內多元素,則使用 Elements(),這裡會取得 IEnumerable<XElement> 資料型別的列舉資料:

// 取得單一元素
XElement element = xmlDocument.Element("Node");
// 取得多元素
IEnumerable<XElement> elements = xmlDocument.Elements("Nodes");

有時候 XML 元素會設定屬性值,可使用 Attribute() 來取得屬性值:

// 取得指定屬性值
XAttribute att = element.Attribute("AttributeName");

取得元素後,若要調用元素內所包含的值,可使用 Value 來取得:

XElement element = xmlDocument.Element("Node");
string value = element.Value;

注意事項

在使用 LINQ to XML 進行資料操作的時候,請隨時注意會不會因為 XML 資料中沒有該元素,造成 NullException。因此在此系列文的範例程式碼 poychang/Demo-Linq-To-Xml 中,會用到很多 Null 條件運算子,用來測試是否為 Null,若為 Null 就不繼續往下操作。


參考資料:


Poy Chang

Trial and Error