Xử lý file XML với C#

Trong lập trình C# việc tương tác với file XML rất hay sử dụng để lấy dữ liệu từ file xml để xử lý nghiệp vụ.

  1. Khi nào nên sử dụng kết nối C# với XML
  2. Một số ví dụ xử lý dữ liệu với file XML

1. Khi nào nên sử dụng kết nối C# với XML

    Cần lưu trữ cấu hình hoặc dữ liệu dạng nhẹ, dễ đọc, không cần cơ sở dữ liệu.
    Dữ liệu ít thay đổi và dễ quản lý bằng tay (ví dụ: file cấu hình app.config, web.config).
    Cần trao đổi dữ liệu giữa các hệ thống khác nhau theo chuẩn chung (ví dụ: Web Services SOAP).
    Muốn serialize/deserialize đối tượng sang XML để lưu trữ hoặc truyền đi.
    Làm việc với dữ liệu dạng cây có cấu trúc rõ ràng, như tài liệu hoặc menu.

2. Một số ví dụ xử lý dữ liệu với file XML

- Lưu file XML không cần cấu trúc

 DataTable dt = new DataTable();
 // cấu trúc 1 biến DataTable
 // Nhiều dòng , nhiều cột, có kiểu dữ liệu tương ứng cho mỗi cột
 //thêm cột
 dt.Columns.Add("STT", typeof(int));
 dt.Columns.Add("HoTen", typeof(string));
 //thêm row
 dt.Rows.Add(1,"A");
 dt.Rows.Add(2, "B");

 //
 dt.Namespace = "dulieu";
 dt.TableName = "hocsinh";
 dt.WriteXml("D:\\data.xml"); // lưu không cần cấu trúc

 Kết quả XML lưu

<?xml version="1.0" standalone="yes"?>
<DocumentElement xmlns="dulieu">
  <hocsinh>
    <STT>1</STT>
    <HoTen>A</HoTen>
  </hocsinh>
  <hocsinh>
    <STT>2</STT>
    <HoTen>B</HoTen>
  </hocsinh>
</DocumentElement> 

- Lưu DataTabe ra file XML có cấu trúc

 DataTable dt = new DataTable();
 // cấu trúc 1 biến DataTable
 // Nhiều dòng , nhiều cột, có kiểu dữ liệu tương ứng cho mỗi cột
 //thêm cột
 dt.Columns.Add("STT", typeof(int));
 dt.Columns.Add("HoTen", typeof(string));
 //thêm row
 dt.Rows.Add(1,"A");
 dt.Rows.Add(2, "B");

 //
 dt.Namespace = "dulieu";
 dt.TableName = "hocsinh";           
  dt.WriteXml("D:\\data.xml", XmlWriteMode.WriteSchema); // lưu có cấu trúc
 

- Lưu XML có thêm schema

? Có có schema để làm cái gì: để khi nạp ngược lại (file xml) vào C# chuyển sang Datatable tự động có cấu trúc giống như file xml.  Xem ví dụ nạp file xml vào biến DataTable

<?xml version="1.0" standalone="yes"?>
<NewDataSet xmlns="dulieu">
  <xs:schema id="NewDataSet" targetNamespace="dulieu" xmlns:mstns="dulieu" xmlns="dulieu" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
    <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="dulieu_x003A_hocsinh" msdata:UseCurrentLocale="true">
      <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element name="hocsinh">
            <xs:complexType>
              <xs:sequence>
                <xs:element name="STT" type="xs:int" minOccurs="0" />
                <xs:element name="HoTen" type="xs:string" minOccurs="0" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:choice>
      </xs:complexType>
    </xs:element>
  </xs:schema>

  <hocsinh>
    <STT>1</STT>
    <HoTen>A</HoTen>
  </hocsinh>
  <hocsinh>
    <STT>2</STT>
    <HoTen>B</HoTen>
  </hocsinh>
</NewDataSet> 

- Ví dụ nạp file xml vào biến DataTable

 DataTable dtGet = new DataTable();
 dtGet.ReadXml("D:\\data.xml");  // nạp file có cấu trúc

 

 

Tìm kiếm:

Trong lập trình C# việc tương tác với file XML rất hay sử dụng để lấy dữ liệu từ file xml để xử lý nghiệp vụ.