Ở đây H sẽ hướng dẫn dùng C#
Các bước cần thực hiện khi thêm node:
- Đọc tập tin
- Tạo một XmlElement x
- Nhập liệu cho x
- Đưa x vào một XmlElement nào đó
- Lưu tập tin
Các bước cần thực hiện khi xóa node:
- Đọc tập tin
- Tìm XmlElement x cần xóa
- Kêu cha của x xóa x đi
- Lưu tập tin
Do thao tác với Xml nên Vinh nhớ thêm namespace "System.Xml" vào nhé
Phần đọc tập tin
- Nếu là phần mềm từ tập tin thực thi nằm trong bin/debug dùng ../ để ra một cấp, sau đó chọn đượng dẫn đúng (VD: ../../xml/vidu.xml)
- Nếu là web ta dùng Server.MapPath() đi từ ngoài thư mục chứa solution vào (VD: Server.MapPath("~/xml/vidu.xml")), nếu hàm đọc nằm trong class thay vì trong web form thì nhớ thêm HttpContext.Current. đằng trước Server.MapPath
- Đoạn code đọc tập tin sẽ là:
string fileName = Server.MapPath("~/xml/vidu.xml");
XmlDocument xDoc= new XmlDocument();
xDoc.Load(fileName);
Phần lưu tập tin: Lưu tập tin thì khá dễ
xDoc.Save(fileName);
Phần thêm một XmlElement vào tài liệu Xml:
- Tạo một XmlElement x: Muốn tạo node ta chỉ cần gọi xDoc.CreateElement, sau đó truyền vào tên node là xong, theo cấu trúc xml trên, ta cần tạo các XmlElement là hotel, id, vitri, gia, thue (ở đây ta chỉ cần tạo tất cả XmlElement, chưa cần quan tâm thằng nào là con thằng nào, chỉ cần có bao nhiêu node, liệt kê hết là ok)
XmlElement x = xDoc.CreateElement("hotel");
XmlElement x_id = xDoc.CreateElement("id");
XmlElement x_vitri = xDoc.CreateElement("vitri");
XmlElement x_gia = xDoc.CreateElement("gia");
XmlElement x_thue = xDoc.CreateElement("thue");
- Nhập liệu cho x: Ta sẽ có 2 trường hợp nhập liệu:
- Nếu nhập liệu cho một thuộc tính ta dùng xmlElementVariable.SetAttribute("name", "value");
- Nếu nhập liệu cho giá trị được bao quanh bởi thẻ đóng và thẻ mở ta dùng xmlElementVariable.InnerText = value; (trong ví dụ xml trên toàn dùng cách này, tuy nhiên H đưa cả hai để về sau tùy bài tập mà ta linh hoạt)
x_id.InnerText = "AA002";
x_vitri.InnerText = "Q2, Thành phố Hồ Chí Minh";
x_gia.InnerText = "700000";
x_thue.InnerText = "0.01";
- Đưa x vào một XmlElement nào đó: Ta cứ dùng AppendChild là xong. Ở ví dụ trên: x_id, x_vitri, x_gia, x_thue là con của x, và x thì lại là con của class (class chính là xDoc.DocumentElement)
x.AppendChild(x_id);
x.AppendChild(x_vitri);
x.AppendChild(x_gia);
x.AppendChild(x_thue);
xDoc.DocumentElement.AppendChild(x);
Như vậy đoạn code thêm mới hoàn chỉnh sẽ là:

Phần xóa thì gồm 2 bước
- Tìm XmlElement x cần xóa: Để tìm ra 1 XmlElement ta có thể:
- Đọc ra danh sách dựa vào TagName (xDoc.GetElementsByTagName("name")) hoặc XPath (SelectNodes), sau đó lấy phần tử dựa vào chỉ số, hoặc là vòng lặp so sánh, v.v...
- Đọc chính xác 1 XmlElement dựa vào primary key (cái này khi học tới DTD thì Vinh mới biết cách khai báo để hệ thống hiểu 1 thuộc tính nào đó là primary key, khi đó mới dùng được), hoặc dùng XPath (SelectSingleNode)
Giả sử H cần xóa hotel có id là AA002 thì dùng XPath như sau:
XmlElement x = (XmlElement)xDoc.SelectSingleNode("//hotel[id='AA002']");
x.ParentNode.RemoveChild(x);
Như vậy code cho phần xóa sẽ là:

Về phần sửa thì nó kết hợp cả xóa và thêm:
- Chọn XmlElement cần sửa --> Xem chọn XmlElement phần xóa
- Thay đổi thông tin --> Xem nhập liệu ở phần thêm
Giả sử H cần đổi địa chỉ cho hotel có id là AA001 thành "Đà Lạt" ta làm như sau:

Cú pháp XPath tham khảo:
