Cách đọc XML trong C#

Cach Doc Xml Trong C



Định dạng dữ liệu được sử dụng rộng rãi để chia sẻ dữ liệu internet là XML, vì dữ liệu có thể được lưu trữ trong đó và trao đổi giữa các hệ thống một cách linh hoạt và thân thiện với người dùng. Trong C#, đọc các tệp XML là một nhiệm vụ phổ biến và .NET framework cung cấp các lớp và phương thức khác nhau để phân tích cú pháp và đọc các tệp XML. Bài đăng này sẽ đề cập đến việc sử dụng .NET framework để đọc XML trong C#.

Đọc XML trong C#

Có một số cách để đọc tệp XML trong C# và mỗi phương pháp đều có ưu điểm và nhược điểm của nó và sự lựa chọn phụ thuộc vào yêu cầu của dự án. Dưới đây là một số cách để đọc tệp XML trong C#:

Đây là nội dung của tệp XML mà tôi đã tạo và sẽ được sử dụng để minh họa cho các phương pháp sắp tới:







< ?xml phiên bản = '1.0' mã hóa = 'utf-8' ? >
< người lao động >
< người lao động >
< nhận dạng > 1 nhận dạng >
< tên > sam bosh tên >
< phòng > Tiếp thị phòng >
< lương > 50000 lương >
người lao động >
< người lao động >
< nhận dạng > 2 nhận dạng >
< tên > Jane Doe tên >
< phòng > Tài chính phòng >
< lương > 60000 lương >
người lao động >
< người lao động >
< nhận dạng > 3 nhận dạng >
< tên > Giacôbê tên >
< phòng > nguồn nhân lực phòng >
< lương > 70000 lương >
người lao động >
người lao động >

1: Sử dụng XmlDocument

Để đọc tệp XML trong C#, bạn có thể sử dụng lớp XmlDocument hoặc lớp XDocument, cả hai đều là một phần của không gian tên System.Xml. Lớp XmlDocument cung cấp cách tiếp cận DOM (Mô hình đối tượng tài liệu) để đọc XML, trong khi lớp XDocument cung cấp cách tiếp cận LINQ (Truy vấn tích hợp ngôn ngữ). Đây là một ví dụ sử dụng lớp XmlDocument để đọc tệp XML:



sử dụng Hệ thống;
sử dụng System.Xml;

chương trình lớp học
{
khoảng trống tĩnh Chính ( sợi dây [ ] tranh luận )
{
XmlDocument doc = XmlDocument mới ( ) ;
doc.Load ( 'employees.xml' ) ;

Các nút XmlNodeList = doc.DocumentElement.SelectNodes ( '/nhân viên/nhân viên' ) ;

cho mỗi ( Nút XmlNode TRONG điểm giao )
{
sợi dây nhận dạng = nút.SelectSingleNode ( 'nhận dạng' ) .InnerText;
tên chuỗi = node.SelectSingleNode ( 'tên' ) .InnerText;
bộ phận chuỗi = node.SelectSingleNode ( 'phòng' ) .InnerText;
lương chuỗi = node.SelectSingleNode ( 'lương' ) .InnerText;
Console.WriteLine ( 'ID: {0}, Tên: {1}, Bộ phận: {2}, Lương: {3}' , nhận dạng , tên, bộ phận, lương ) ;
}
}
}

Mã này sử dụng lớp XmlDocument để tải tệp XML và phương thức SelectNodes để truy xuất danh sách các nút nhân viên. Sau đó, đối với mỗi nút nhân viên, nó sử dụng phương thức SelectSingleNode để truy xuất các giá trị của nút con id, tên, bộ phận và lương và hiển thị chúng bằng Console.WriteLine:







2: Sử dụng XDocument

Ngoài ra, bạn cũng có thể sử dụng lớp XDocument để đọc tệp XML bằng cách sử dụng phương pháp LINQ và dưới đây là mã minh họa cách thực hiện:

sử dụng Hệ thống;

chương trình lớp học
{
khoảng trống tĩnh chính ( sợi dây [ ] tranh luận )
{
Tài liệu XDocument = XDocument.Load ( 'employees.xml' ) ;

cho mỗi ( phần tử XEuity TRONG doc.Descendants ( 'người lao động' ) )
{
int nhận dạng = int.Parse ( phần tử.Element ( 'nhận dạng' ) .Giá trị ) ;
tên chuỗi = phần tử. Element ( 'tên' ) .Giá trị;
bộ phận chuỗi = phần tử.Element ( 'phòng' ) .Giá trị;
lương int = int.Parse ( phần tử.Element ( 'lương' ) .Giá trị ) ;
Console.WriteLine ( $ 'ID: {id}, Tên: {name}, Bộ phận: {department}, Lương: {salary}' ) ;
}
}
}

Tệp XML được tải vào một đối tượng XDocument bằng phương thức XDocument.Load. Sau đó, tất cả các phần tử 'nhân viên' của tệp XML đều được truy xuất bằng kỹ thuật Descendants. Đối với mỗi phần tử, các phần tử con của nó được truy cập bằng phương thức Phần tử và các giá trị của chúng được trích xuất bằng thuộc tính Giá trị. Cuối cùng, dữ liệu trích xuất được in ra bàn điều khiển.



Lưu ý rằng XDocument thuộc về không gian tên System.Xml.Linq, vì vậy bạn cần đưa câu lệnh sử dụng sau vào đầu tệp C# của mình

3: Sử dụng XmlReader

XmlReader là một cách nhanh chóng và hiệu quả để đọc tệp XML trong C#. Nó đọc tệp một cách tuần tự, có nghĩa là nó chỉ tải một nút tại một thời điểm, khiến nó trở nên lý tưởng để làm việc với các tệp XML lớn mà nếu không sẽ khó xử lý trong bộ nhớ.

sử dụng Hệ thống;
sử dụng System.Xml;

chương trình lớp học
{
khoảng trống tĩnh chính ( sợi dây [ ] tranh luận )
{
sử dụng ( Trình đọc XmlReader = XmlReader.Create ( 'employees.xml' ) )
{
trong khi ( người đọc.Đọc ( ) )
{
nếu như ( reader.NodeType == XmlNodeType.Element && người đọc.Name == 'người lao động' )
{
Console.WriteLine ( 'NHẬN DẠNG: ' + đầu đọc.GetAttribute ( 'nhận dạng' ) ) ;
reader.ReadToDescendant ( 'tên' ) ;
Console.WriteLine ( 'Tên: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextAnh chị em ( 'phòng' ) ;
Console.WriteLine ( 'Phòng: ' + reader.ReadElementContentAsString ( ) ) ;
reader.ReadToNextAnh chị em ( 'lương' ) ;
Console.WriteLine ( 'Lương: ' + reader.ReadElementContentAsString ( ) ) ;
}
}
}
}
}

Trong ví dụ này, chúng tôi sử dụng phương thức XmlReader.Create để tạo một phiên bản của XmlReader và chuyển đường dẫn tệp XML làm tham số. Sau đó, chúng tôi sử dụng vòng lặp while để đọc qua từng nút tệp XML bằng cách sử dụng phương thức Read của XmlReader.

Bên trong vòng lặp, trước tiên chúng tôi kiểm tra xem nút hiện tại có phải là phần tử nhân viên hay không bằng cách sử dụng thuộc tính NodeType và Tên của XmlReader. Nếu vậy, chúng tôi sử dụng phương thức GetAttribute để truy xuất giá trị của thuộc tính id.

Tiếp theo, chúng tôi sử dụng phương thức ReadToDescendant để di chuyển trình đọc đến phần tử tên bên trong phần tử nhân viên. Sau đó, giá trị của phần tử tên được lấy bằng cách sử dụng hàm ReadElementContentAsString.

Tương tự, chúng tôi sử dụng phương thức ReadToNextSibling để di chuyển trình đọc đến phần tử anh chị em tiếp theo và nhận giá trị của các phần tử bộ phận và tiền lương.

Cuối cùng, chúng tôi sử dụng khối using để đảm bảo rằng đối tượng XmlReader được xử lý đúng cách sau khi chúng tôi đọc xong tệp XML:

4: XML sang LINQ

Đọc tệp XML bằng LINQ to XML trong C# là một cách hiệu quả để truy cập và thao tác dữ liệu XML. LINQ to XML là một thành phần của công nghệ LINQ cung cấp một API đơn giản và hiệu quả để làm việc với dữ liệu XML.

sử dụng Hệ thống;
sử dụng System.Linq;
sử dụng System.Xml.Linq;

chương trình lớp học
{
khoảng trống tĩnh chính ( sợi dây [ ] tranh luận )
{
Tài liệu XDocument = XDocument.Load ( 'employees.xml' ) ;

var nhân viên = từ e TRONG doc.Descendants ( 'người lao động' )
lựa chọn mới
{
Id = e.Element ( 'nhận dạng' ) .Giá trị,
Tên = e.Element ( 'tên' ) .Giá trị,
Sở = e.Element ( 'phòng' ) .Giá trị,
Lương = e.Element ( 'lương' ) .Giá trị
} ;
cho mỗi ( nhân viên var TRONG người lao động )
{
Console.WriteLine ( $ 'Id: {employee.Id}, Tên: {employee.Name}, Bộ phận: {employee.Department}, Lương: {employee.Salary}' ) ;
}
}
}

Trong mã này, trước tiên chúng tôi tải tệp XML bằng phương thức XDocument.Load(). Sau đó, chúng tôi sử dụng LINQ to XML để truy vấn dữ liệu XML và chọn các phần tử id, tên, bộ phận và lương cho từng phần tử nhân viên. Chúng tôi lưu trữ dữ liệu này ở dạng ẩn danh và sau đó lặp qua các kết quả để in thông tin nhân viên ra bảng điều khiển.

5: Sử dụng XPath

XPath là ngôn ngữ truy vấn được sử dụng để điều hướng qua tài liệu XML nhằm định vị các phần tử, thuộc tính và nút cụ thể. Nó là một công cụ hiệu quả để tìm kiếm và lọc thông tin trong một tài liệu XML. Trong C#, chúng ta có thể sử dụng ngôn ngữ XPath để đọc và trích xuất dữ liệu từ các tệp XML.

sử dụng Hệ thống;
sử dụng System.Xml.XPath;
sử dụng System.Xml;

chương trình lớp học
{
khoảng trống tĩnh chính ( sợi dây [ ] tranh luận )
{
XmlDocument doc = XmlDocument mới ( ) ;
doc.Load ( 'employees.xml' ) ;

// Tạo XPathNavigator từ tài liệu
Điều hướng XPathNavigator = doc.CreateNavigator ( ) ;

// Biên dịch biểu thức XPath
XPathExpression expr = nav.Biên dịch ( '/nhân viên/nhân viên/tên' ) ;

// Đánh giá biểu thức và lặp qua các kết quả
Trình lặp XPathNodeIterator = nav.Select ( expr ) ;
trong khi ( iterator.MoveNext ( ) )
{
Console.WriteLine ( iterator.Current.Value ) ;
}
}
}

Mã này tải tệp “employees.xml” bằng XmlDocument, tạo XPathNavigator từ tài liệu và biên dịch biểu thức XPath để chọn tất cả các phần tử bên dưới các phần tử . Sau đó, nó đánh giá biểu thức và lặp qua các kết quả, in ra giá trị của từng phần tử .

Ghi chú: sử dụng XPath có thể là một cách hiệu quả và linh hoạt để chọn các phần tử và thuộc tính từ một tài liệu XML, nhưng nó cũng có thể phức tạp hơn một số phương pháp khác mà chúng ta đã thảo luận.

Phần kết luận

Việc sử dụng lớp XmlDocument cung cấp khả năng thao tác DOM đầy đủ, nhưng nó có thể chậm hơn và tốn nhiều bộ nhớ hơn so với các phương pháp khác. Lớp XmlReader là một tùy chọn tốt để đọc các tệp XML lớn, vì nó cung cấp cách tiếp cận dựa trên luồng nhanh, chỉ chuyển tiếp và không lưu trong bộ nhớ cache. Lớp XDocument cung cấp một cú pháp đơn giản và ngắn gọn hơn, nhưng nó có thể không hiệu quả bằng XmlReader. Ngoài ra, các phương thức LINQ to XML và XPath cung cấp khả năng truy vấn mạnh mẽ để trích xuất dữ liệu cụ thể từ tệp XML.