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ụ.

Lưu biến DataTable ra file XML

- Lưu DataTabe ra 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
 

 Kết quả XML lưu 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