1. Nội dung của Books.xml
books.xml ```
2. Đọc tệp XML bằng XmlTextReader
XmlTextReader là một trình đọc di chuyển tuần tự về phía trước và chỉ đọc từng phần dữ liệu vào bộ nhớ đệm. Nó có hiệu suất tốt hơn so với XmlDocument vì không cần tải toàn bộ tài liệu vào bộ nhớ.
void DocBangXmlTextReader()
{
using (var reader = new XmlTextReader("Books.xml"))
{
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
if (reader.Name == "book")
{
Console.WriteLine(reader.GetAttribute("id") + ": ");
reader.Read();
var tacGia = reader.ReadElementContentAsString();
var tieuDe = reader.ReadElementContentAsString();
var theLoai = reader.ReadElementContentAsString();
var gia = reader.ReadElementContentAsString();
var ngayXuatBan = reader.ReadElementContentAsString();
var moTa = reader.ReadElementContentAsString();
Console.WriteLine("{0} book {1} written by {2}, published on {3}", theLoai, tieuDe, tacGia, ngayXuatBan);
Console.WriteLine(moTa);
}
}
}
}
3. Đọc tệp XML bằng XmlDocument và XmlNodeReader
XmlNodeReader hoạt động tương tự như XmlTextReader nhưng sử dụng một đối tượng XmlNode làm nguồn dữ liệu.
void DocBangXmlDocument()
{
var doc = new XmlDocument();
doc.Load("Books.xml");
var danhSachNode = doc.GetElementsByTagName("book");
foreach (XmlNode node in danhSachNode)
{
Console.WriteLine(node.Attributes["id"].Value + ":");
var reader = new XmlNodeReader(node);
reader.Read();
reader.Read();
var tacGia = reader.ReadElementContentAsString();
var tieuDe = reader.ReadElementContentAsString();
var theLoai = reader.ReadElementContentAsString();
var gia = reader.ReadElementContentAsString();
var ngayXuatBan = reader.ReadElementContentAsString();
var moTa = reader.ReadElementContentAsString();
Console.WriteLine("{0} book {1} written by {2}, published on {3}", theLoai, tieuDe, tacGia, ngayXuatBan);
Console.WriteLine(moTa);
}
}
4. Chỉnh sửa tệp XML
XmlDocument lưu trữ tài liệu XML trong bộ nhớ, do đó không cần phương thức Close hoặc Dispose. Sau khi chỉnh sửa xong, bạn có thể lưu lại tệp.
void ChinhSuaXmlDocument()
{
var taiLieuXml = new XmlDocument();
taiLieuXml.Load("Books.xml");
var nutCanChinhSua = taiLieuXml.DocumentElement.SelectSingleNode("book/genre");
nutCanChinhSua.InnerText = "XML Tech";
var phanTuMoi = taiLieuXml.CreateElement("book");
var thuocTinhMoi = taiLieuXml.CreateAttribute("id");
thuocTinhMoi.Value = "bk103";
phanTuMoi.Attributes.Append(thuocTinhMoi);
var phanTuTacGia = taiLieuXml.CreateElement("author");
phanTuTacGia.InnerText = "Mark Russinovich,David Solomon,Alex Ionecsu";
phanTuMoi.AppendChild(phanTuTacGia);
var phanTuTieuDe = taiLieuXml.CreateElement("title");
phanTuTieuDe.InnerText = "Windows Internals, 5th edition";
phanTuMoi.AppendChild(phanTuTieuDe);
var phanTuTheLoai = taiLieuXml.CreateElement("genre");
phanTuTheLoai.InnerText = "Windows Server 2008";
phanTuMoi.AppendChild(phanTuTheLoai);
var phanTuGia = taiLieuXml.CreateElement("price");
phanTuGia.InnerText = "69.99";
phanTuMoi.AppendChild(phanTuGia);
var phanTuNgayXuatBan = taiLieuXml.CreateElement("publish_date");
phanTuNgayXuatBan.InnerText = "2009-6-17";
phanTuMoi.AppendChild(phanTuNgayXuatBan);
var phanTuMoTa = taiLieuXml.CreateElement("description");
phanTuMoTa.InnerText = "Windows Internals...";
phanTuMoi.AppendChild(phanTuMoTa);
taiLieuXml.DocumentElement.AppendChild(phanTuMoi);
taiLieuXml.Save("Books.xml");
}