Xử Lý XML Trong C# – Norid's Blog

Để sử dụng XML trên C#:

using System.Xml.Linq;

Cấu trúc cơ bản:

XML được xây dựng dựa vào cấu trúc các node lồng nhau, mỗi node sẽ có 1 thẻ mở và đóng. Thông thường XML có cấu trúc gồm:

  • phần Header(lưu version xml đang sử dụng và kiểu mã hóa). Ex: <?xml version=”1.0″ encoding=”utf-8″ standalone=”yes”?>
  • Node Root: là thẻ ngoài cùng, thường khai báo tên chính của tài liệu. Ở ví dụ phía dưới Node Root là: “Students”.
  • Node con: thường gồm 2 phần: Attribute (chứa thuộc tính unique để phân biệt với các node khác, và mỗi node chỉ có 1 attribute) và Element

Trong C#: Xdocument chứa 1 list XELement Cho một file xml như sau:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> <!--Creating an XML Tree using LINQ to XML--> <Students> <Student Id="101"> <Name>Mark</Name> <Gender>Male</Gender> <TotalMarks>800</TotalMarks> </Student> <Student Id="102"> <Name>Rosy</Name> <Gender>Female</Gender> <TotalMarks>900</TotalMarks> </Student> <Student Id="103"> <Name>Pam</Name> <Gender>Female</Gender> <TotalMarks>850</TotalMarks> </Student> <Student Id="104"> <Name>John</Name> <Gender>Male</Gender> <TotalMarks>950</TotalMarks> </Student> </Students>

Trong văn bản XML trên:

  • Students là node root
  • Student là node con đại diện cho 1 record
    • Student có 1 attribute là Id
    • Student có 3 node con(element) là Name, Gender, TotalMarks

Đọc file XML bằng Linq

string path = @"D:\LuyenTap\WSC\181019\xml\Student.xml"; XDocument xDocument = XDocument.Load(path); var data = xDocument.Descendants("Student").Where(t => Int32.Parse(t.Attribute("Id").Value) > 100). Select(o => new { id = o.Attribute("Id").Value, name = o.Element("Name").Value, gender = o.Element("Gender").Value }).ToList(); int i = 0; foreach (var item in data) { listView1.Items.Add(item.id); listView1.Items[i].SubItems.Add(item.name); listView1.Items[i].SubItems.Add(item.gender); i++; }

Ở đây mình đọc file và hiển thị dữ liệu lên thông qua listview

  • Descendants: Parse file xml để query linq, giá trị đặt trong Descendants thường là node con chứa các Attribute và Element để truy vấn.Descendants sẽ duyệt hết file tìm những phần tử có Tên trùng với “Student” tạo thành 1 list. VD trên list sẽ có 4 students, mỗi student sẽ có các thuộc tính riêng, muốn truy cập phải dùng attribute hoặc element.
  • Cơ chế câu query trên sẽ duyệt tất cả các node “Student” thõa điều kiện.
  • Nếu trong Node có chứa các node khác thì chỉ cần x.Element(“tên node”) kết quả sẽ xuất ra dữ liệu, tiếp tục truy vấn

Thêm dữ liệu XML

string path = @"D:\LuyenTap\WSC\181019\xml\Student.xml"; XDocument xDocument = XDocument.Load(path); XElement xElement = new XElement("Student"); xElement.SetAttributeValue("Id", 225); xElement.SetElementValue("Name", "Phuc"); xElement.SetElementValue("Gender", "Male"); xElement.SetElementValue("TotalMarks", 100); xDocument.Element("Students").Add(xElement); xDocument.Save(path);
  • Xelement: Tạo record Student mới
  • Id phải unique để dễ phân biệt với các Id của node khác

Ý tưởng: Lúc đầu vẫn load dựa trên đường dẫn path, sau đó tạo một đối tượng element có tên xElement. Set các AttributeValue và ElementValue cho đối tượng, sau đó lưu record Student vừa tạo vào node root Students và save lại theo đường dẫn.

Đối với file chưa có sẵn

Readmore: https://www.mastercode.vn/blog/web-development/bai-9-serialization-nen-tang-lap-trinh-c.57

Xóa dữ liệu XML

string path = @"D:\LuyenTap\WSC\181019\xml\Student.xml"; XDocument xDocument = XDocument.Load(path); var studentFilter = xDocument.Descendants("Student").Where(x => Int32.Parse(x.Element("TotalMarks").Value) == 100).FirstOrDefault(); studentFilter.Remove(); xDocument.Save(path); LoadData();

Ý tưởng: truy vấn để tất cả record Student để tìm ra 1 record thõa mãn. Và dùng hàm Remove() để xóa record vừa tìm được và cập nhật lại file.

Sửa dữ liệu XMLTương tự như xóa:

string path = @"D:\LuyenTap\WSC\181019\xml\Student.xml"; XDocument xDocument = XDocument.Load(path); var studentFilter = xDocument.Descendants("Student").Where(x => Int32.Parse(x.Element("TotalMarks").Value) == 100).FirstOrDefault(); //Cách khác: studentFilter.SetElementValue("Name","Phuc") studentFilter.Element("Name").Value = "Phuc"; xDocument.Save(path); LoadData();

Share this:

  • Twitter
  • Facebook
Like Loading...

Related

Từ khóa » Thêm Xóa Sửa Xml Trong C#