1. Tổng quan về Linq to Xml:
LINQ to XML cung cấp một giao diện lập trình XML.
LINQ to XML sử dụng những ngôn ngữ mới nhất của .NET Language Framework và được nâng cấp, thiết kế lại với giao diện lập trình XML Document object Model (DOM). Tuy nhiên nó cung cấp mô hình đối tượng mới đơn giản hơn và dễ thao tác hơn để làm việc.
LINQ to XML có cấu trúc truy vấn tương tự SQL.
Khả năng sử dụng kết quả truy vấn là tham số cho đối tượng XElement và XAttribute cho phép một phương pháp mạnh mẽ để tạo ra cây XML
Sử dụng LINQ to XML bạn có thể:
+ Tạo một file .xml.
+ Load XML từ nhiều file hoặc luồng.
+ Xuất XML ra file hoặc luồng.
+ Truy vấn cây XML bằng những truy vấn LINQ.
+ Thao tác cây XML trong bộ nhớ.
+ Biến đổi cây XML từ dạng này sang dạng khác.
Để có thể tiếp cận nhanh chóng các vấn đề này, ta sẽ lượt lượt đi vào các ví dụ cụ thể ở phần tiếp theo.
2. Demo minh họa:
Dựa vào hình trên ta có thể thấy một file xml gồm các phần chính gồm:
+ Phần khai báo.
+ Phần thân :
- Thẻ bắt đầu.
- Thẻ kết thúc.
- Các element.
- Tag.
b. Tạo một cây XML:
Sử dụng đối tượng XDocument hoặc XElement để xây dựng một cây XML. Thông thường ta có thể tạo ra cây XML với nút gốc XElement.
Xem ví dụ cụ thể sau :
Hoặc:
Trong đó, gồm các phương thức sau:
- Tạo một phần tử XML:
XElement(XName name, object content)
XElement(XName name)
+ XName: tên phần tử.
+ object: nội dụng của phần tử.
- Tạo chú thích cho cây XML
+ String: nội dung cần chú thích.
- Đối tượng XDeclaration:
XDeclaration(string version,string encoding,string standalone)
Đối tượng XDeclaration được sử dụng để khai báo XML version, encoding, and có thể có hoặc không thuộc tính standalone của một tài liệu XML
c. Lưu file XML :
Thông thường, sau khi tạo file xong ta sẽ lưu nó lại bằng cách gọi phương thức Xdocument.Save(string url) như sau:
docXml.Save(“Contacts.xml”);
hoặc
xml.Save(“Contacts.xml”);
d. Load một file XML:
Để nạp một file .xml vào chương trình ta dùng phương thức:
XDocument.Load( string url) hoặc XElement.Load(string url)
Với 2 ở trên ta có thể thực hiện như sau:
XDocument docXml = XDocument.Load(“Contacts.xml”);
hoặc
XElement xml = XElement.Load(“Contacts.xml”);
e. Thực hiện các thao tác truy vấn trên file xml :
-
Thêm (Add) một Element vào cây XML:
Sử dụng phương thức XElement.Add() :
XElement xml = XElement.Load(“Contacts.xml”);
xml.Add(new XElement(“Contact”,
new XElement(“Contact”,
new XElement(“Name”, “Nguyễn Văn Tiến”),
new XElement(“Phone”, “0164302734″),
new XElement(“Address”,
new XElement(“Street”, “Văn Lang”),
new XElement(“City”, “ĐN”),
new XElement(“Postal”, “643263″)
)
)
);
xml.Add(new XElement(“Contact”,
new XElement(“Contact”,
new XElement(“Name”, “Trần Trung Tín”),
new XElement(“Phone”, “09803273273″),
new XElement(“Address”,
new XElement(“Street”, “Hùng Vương”),
new XElement(“City”, “HCM”),
new XElement(“Postal”, “34592″)
)
)
);
//Sau khi add xong, lưu lại
xml.Save(“Contacts.xml”);
Sau khi thêm 2 Element ta có được cây XML mới như sau:
-
Xóa (Delete) một Element khỏi cây XML:
Ở đây, tôi sẽ trình bày một phương thức xóa một Element có “Phone = 0164302734″
XElement xml = XElement.Load(“Contacts.xml”);
xml.Elements(“Contact”).Where(c =>(string)c.Element(“Phone”) == “0164302734″).Remove();
xml.Save(“Contacts.xml”);
Sau khi thực hiện xong, Element sau sẽ bị xóa khỏi cây :
-
Cập nhật (Update) một Element trong cây XML
Tôi sẽ trình bày phương thức cập nhật lại thuộc tính (Phone và Street) của một Contact mà có Name là Nguyễn Thành Luân.
// Lấy về một contact có Name = “NTL”
var contact = from c in xml.Elements(“Contact”)
where c.Element(“Name”).Value == “Nguyễn Thành Luân”
select c;
// Duyệt nó , sau đó update lại Phone
foreach (var item in contact)
{
item.SetElementValue(“Phone”, “0973 729 911″);
item.Element(“Address”).Element(“Street”).Value = “Nguyễn Huệ”;
}
xml.Save(“Contacts.xml”);
Ở đây việc cập nhật được thực hiện bằng cách sử dụng phương thức :
SetElementValue(Xname name, Object value)
+ name : Tên của thuộc tính
+ value : Giá trị muốn cập nhật.
Hoặc gán giá trị cần cập nhật cho Element đó qua phương thức :
Element(Xname name).Value = value;
f. Các phương thức thông dụng khác:
// —— Lấy tất cả các Element có City = HCM
var contacts = from c in xml.Elements(“Contact”)
where (string) Element(“Address”).Element(“City”)== “HCM”
select c;
// —– Lấy tất cả các Element của file .xml
IEnumerable<XElement> contacts = xml.Elements();
foreach (var contact in contacts)
{
// Action
}
// —– Take(x) : Phương thức lấy x Element đầu tiên
var contact = xml.Elements().Take(3);
foreach (var item in contact3)
{
// Action
}
// —– Skip(x) – Take(y) : Lấy y Element(“Contact”) từ vị trí x
var contact = xml.Elements().Skip(1).Take(2);
// —– Reverse().Take(x) : Lấy x phương thức cuối cùng
// — + Duyệt ngược từ dưới lên:
var contact = xml.Elements().Reverse().Take(2);
foreach (var item in contact)
{
// Action
}
// —- + Duyệt theo chiều thuận:
var contact = xml.Elements().Reverse().Take(2).Reverse();
foreach (var item in contact)
{
// Action
}
Tóm lại, tôi vừa trình bày cho các điểm cơ bản về Linq To Sql gồm:
+ Tạo
+ Load
+ Save
+ Query : Insert, Delete, Update
+ Một vài phương thức thông dụng khác.






Pingback: TỔNG QUAN VỀ LINQ | Welcom to Xi-trum blog ~.^ !!!