2.6.1. XML là gì?
XML viết tắt của chữ eXtensible Markup Language (ngôn ngữ nâng cấp
có thể mở rộng) là một bộqui luật về cách chia một tài liệu ra làm nhiều phần,
rồi đánh dấu và ráp các phần khác nhau lại đểdễnhận diện chúng.
Tổ hợp Web toàn cầu W3C gọi XML là "một cú pháp thông dụng cho
việc biểu thị cấu trúc trong dữ liệu". Dữliệu có cấu trúc tham chiếu đến dữliệu
được gán nhãn cho nội dung, ý nghĩa, hoặc công dụng.
XML có cấu trúc giống như HTML tuy nhiên HTML sử dụng những thẻ
được định nghĩa trước (trong một tài liệu html không thể sử dụng thẻ do người dùng định nghĩa), còn trong trang XML hoàn toàn có thểsử dụng những thẻdo người dùng định nghĩa.
≡
2.6.2. Cú pháp XML
Một trang XML phải tuân thủcác quy luật sau.
1. Một trang XML phải bắt đầu bằng XML declaration (ví dụ: <?xml
version="1.0" encoding="utf-8" ?>)
2. Phải có một root (gốc) Element duy nhất, gọi là Document
Element, nó chứa tất cảcác Elements khác trong tài liệu.
3. Mỗi Child Element phải nằm trọn bên trong Element cha của nó.
4. Mỗi opening Tag phải có một closing Tag giống như nó (Nếu Tag
nào không chứa gì ở giữa thì phải chấm dứt bằng "/>", thí dụ như
<BR/>, <HR/>…). opening Tag và closing Tag phải được đánh vần
5. Các Tag không được xen kẽ nhau (thí dụ như <Class>TK6<Lop>TK6</Class></Lop> là bất hợp lệ vì <Lop> nằm trong Tag Class).
6. Giá trị Attribute trong XML phải được gói giữa một cặp ngoặc
kép
2.6.3. Đọc/ghi file XML trong C#
2.6.3.1. Ghi dữliệu ra file XML
Trong C# để ghi dữ liệu ra file XML chúng ta có thể sử dụng 1 các đối tượng sau:
XmlTextWriter
XmlWriter
XmlDocument
Minh họa: Để tạo trang XML SinhVien.xml có cấu trúc như bên dưới
chúng ta có thể sử dụng XmlTextWriter hay XmlDocument (trước khi sử dụng
các đối tượng này phải khai báo namespaceusingSystem.Xml;).
Trang SinhVien.xml - Sửdụng đối tượng XmlTextWriter:
XmlTextWriterxmlText =newXmlTextWriter("SinhVien.xml",null);
//Ghi chú thích
xmlText.WriteComment("Đọc ra file XML");
//Ghi dữliệu: 1 lớp có nhiều sinh viên (tên, năm sinh) xmlText.WriteStartElement("Lop");
//Bản ghi thứnhất
xmlText.WriteStartElement("SinhVien"); xmlText.WriteAttributeString("ID","1");
xmlText.WriteString("Hoàng Quốc Việt"); xmlText.WriteEndElement();//</Name> xmlText.WriteStartElement("NamSinh"); xmlText.WriteValue(1985); xmlText.WriteEndElement(); xmlText.WriteEndElement(); //Bản ghi thứ2 xmlText.WriteStartElement("SinhVien"); xmlText.WriteAttributeString("ID","2"); xmlText.WriteStartElement("Ten");
xmlText.WriteString("Nguyễn Anh Tuấn"); xmlText.WriteEndElement(); xmlText.WriteStartElement("NamSinh"); xmlText.WriteValue(1986); xmlText.WriteEndElement(); xmlText.WriteEndElement(); //Đóng file xmlText.Close();
- Sửdụng đối tượng XmlDocument
XmlDocument xmlDoc =newXmlDocument();
XmlDeclarationxmlDec = xmlDoc.CreateXmlDeclaration("1.0","utf-8",null);
//Tạo Node gốc <->Class
XmlElementLopNode = xmlDoc.CreateElement("Lop");//Root Node
xmlDoc.InsertBefore(xmlDec, xmlDoc.DocumentElement); xmlDoc.AppendChild(LopNode);
//Tạo bản ghi thứnhất
XmlElementSinhVienNode =xmlDoc.CreateElement("SinhVien"); SinhVienNode.SetAttribute("ID","1");
LopNode.AppendChild(SinhVienNode);
//Tạo 2 node con cho bản ghi thứnhất và set giá trị XmlElementTenNode = xmlDoc.CreateElement("Ten");
XmlElementNamSinhNode = xmlDoc.CreateElement("NamSinh"); TenNode.InnerText ="Hoàng Quốc Việt";
NamSinhNode.InnerText ="1985"; SinhVienNode.AppendChild(TenNode); SinhVienNode.AppendChild(NamSinhNode);
//Tạo bản ghi thứhai
XmlElementSinhVienNode2 = xmlDoc.CreateElement("SinhVien"); SinhVienNode2.SetAttribute("ID","2");
LopNode.AppendChild(SinhVienNode2);
//Tạo 2 node con cho bản ghi thứnhất và set giá trị XmlElementTenNode2 = xmlDoc.CreateElement("Ten");
XmlElementNamSinhNode2 = xmlDoc.CreateElement("NamSinh"); TenNode2.InnerText ="Nguyễn Anh Tuấn";
NamSinhNode2.InnerText ="1986"; SinhVienNode2.AppendChild(TenNode2); SinhVienNode2.AppendChild(NamSinhNode2);
//Lưu file
xmlDoc.Save(@"SinhVien.xml");
Chú ý: việc sử dụng đối tượng XmlWriterhoàn toàn tương tự như việc sử dụng đối tượng XmlTextWriter
2.6.3.2. Đọc dữliệu từfile XML
Để đọc dữ liệu từ file xml chúng ta có thể sử dụng một trong các đối tượng sau:
XmlTextReader
XmlReader
Minh họa: Đọc nội dung của file SinhVien.xml ở trên và hiển thị thông tin (tên, năm sinh) của từng sinh viên (MessageBox). Ở đây chúng ta sử dụng đối tượng XmlTextReader. Việc sử dụng đối tượng XmlReader là hoàn toàn tương tự.
stringstrSinhVien ="";
stringstrTenNode ="";
//
XmlTextReaderread =newXmlTextReader("SinhVien.xml");
//
while(read.Read()) {
switch(read.NodeType) {
caseXmlNodeType.Element: strTenNode = read.Name;
break;
caseXmlNodeType.Text:
switch(strTenNode) {
case"Ten":
strSinhVien += read.Value;
strSinhVien +=",";//Hai thông tin ngăn cách nhau bởi dấu , break;
case"NamSinh":
strSinhVien += read.Value;
MessageBox.Show(strSinhVien);//In từng bản ghi
strSinhVien =""; break; } break; } }