Phổ Biến 5/2024 # Load File Xml Bằng C# Và Linq # Top 6 Yêu Thích

Hôm nay, chúng ta sẽ cùng nhau tìm hiểu về cách nạp một tập tin XML vào trong ứng dụng viết bằng C# với sự hỗ trợ của LINQ. Qua đó, các bạn có thể tự tin viết các ứng dụng tương tác với tập tin XML theo mục đích của riêng mình.

Dòng đầu tiên của một tài liệu XML (không bắt buộc) là dòng chỉ dẫn xử lý (Processing Instruction). Và hầu như mọi tài liệu XML đều có dòng đầu tiên với nội dung giống hệt như vậy, hoặc là với một số thay đổi nhỏ.

Bây giờ chúng ta sẽ bắt tay vào công việc chính của bài hôm nay: viết code C# để nạp các thông tin từ tập tin XML trên vào trong chương trình.

Một điều cần lưu ý là bởi vì khi chúng ta biên dịch chương trình thì tập tin exe của chúng ta sẽ nằm trong thư mục Debug của project, trong khi tập tin XML mặc định không được copy theo, do đó sẽ dẫn đến lỗi nếu như chúng ta thực hiện biên dịch chương trình. Để khắc phục lỗi này, chúng ta hãy nhấp chuột chọn file chúng tôi trong Solution Explorer, trong ô Properties, thay đổi giá trị “Copy to Output Directory” thành “Copy if newer” hoặc “Copy Always”

using System.Xml.Linq;

Trong hàm Main, chúng ta khai báo một đối tượng của lớp XElement. Đối tượng này sẽ được khởi tạo như sau:

XElement xmlBook = XElement.Open(“books.xml”);

Phương thức tĩnh XElement.Open cho phép chúng ta nạp tập tin XML vào trong bộ nhớ. Trong dòng lệnh trên, chúng ta sử dụng tập tin chúng tôi nằm cùng thư mục với tập tin thực thi (đến đây thì bạn có thể hiểu rằng tại sao chúng ta phải chỉnh thuộc tính để tập tin chúng tôi được copy đồng thời với tập tin chương trình khi biên dịch). Đồng thời, đối tượng xmlBook sẽ lưu thông tin về thẻ gốc của tập tin XML này. Lưu ý rằng nếu như file XML của chúng ta không có thẻ gốc, chương trình sẽ phát sinh lỗi như sau:

Sau khi đã có được tham chiếu đến thẻ gốc, chúng ta sẽ thực hiện duyệt qua các phần tử Book trong nội dung file XML vừa được nạp vào. Để có thể lưu trữ được các thông tin này, chúng ta sẽ tạo thêm một lớp Book có các dữ liệu sau đây:

class Book

{

public string Title { get; set; }

public string Author { get; set; }

public float Price { get; set; }

}

Và tiếp đó là phần thú vị nhất trong chương trình. Đoạn mã sau đây sẽ cho phép chúng ta thực hiện duyệt qua các thông tin có trong tập tin chúng tôi và đưa vào trong một danh sách các Book.

select new Book

{

Title = q.Element("title").Value,

Author = q.Element("author").Value,

Price = float.Parse(q.Element("price").Value)

}).ToList();

Ghi chú: LINQ (Language-Integrated Query) là một kỹ thuật truy vấn được tích hợp vào trong các ngôn ngữ lập trình .NET nhằm giúp việc viết code và thao tác trên các dữ liệu trở nên dễ dàng hơn. Cú pháp của LINQ gần giống như cú pháp của SQL).

Các bước thực hiện của đoạn mã trên là như sau:

Bước 1: Gọi xmlBook.Elements(“book”), kết quả trả về của lời gọi này là danh sách các thẻ có tên “book” nằm trong thẻ gốc xmlBook và kèm theo các thông tin trong thẻ đó. Dựa vào nội dung của file chúng tôi mà chúng ta có thể đoán được rằng các thẻ trả về sẽ có những thẻ con là “title”, “author” và “price”.

Bước 2: Duyệt qua từng phần tử trong danh sách thẻ được trả về ở trên (nhờ cấu trúc from q in..), q ở đây là một biến tạm thời dùng để chỉ định phần tử hiện tại trong danh sách (q không cần phải khai báo hay chỉ định kiểu dữ liệu, trình biên dịch đủ thông minh để suy ra được kiểu dữ liệu của q từ kiểu dữ liệu của tập hợp trả về là gì).

Bước 3: Với mỗi phần tử trong danh sách đó, chúng ta thực hiện tạo ra một đối tượng Book với các thông tin tương ứng của phần tử đang xét. Như trong đoạn mã trên, với mỗi thẻ dữ liệu XML được trả về, chúng ta sẽ tạo đối tượng Book với Title, Author và Price là thông tin được chứa trong các thẻ con tương ứng. Lời gọi: q.Element(“title”).Value cho phép chúng ta lấy giá trị được chứa trong thẻ có tên “title” nằm trong q, tương tự đối với “Author” và “Price”. Lưu ý: chúng ta đã khai báo kiểu dữ liệu của Price trong lớp Book là float, do đó bắt buộc chúng ta phải chuyển đổi kiểu dữ liệu string lấy được từ thẻ “Price” về dạng float.

Bước 4: Sau khi đã tạo được một tập hợp các đối tượng Book, chúng ta chuyển đổi tập hợp này sang dạng List để phù hợp với kiểu dữ liệu của  biến books.

Nếu dữ liệu đã được nạp thành công, chúng ta có thể in ra màn hình dữ liệu đó bằng đoạn lệnh sau:

foreach (Book b in books)

{

Console.WriteLine(b.Title + "-" + b.Author + "-" + b.Price);

}

Và chúng ta nhận được kết quả:

Như vậy là chúng ta đã hoàn thành việc nạp dữ liệu từ file XML vào trong một ứng dụng viết bằng C# chỉ với vài dòng code với sự trợ giúp của LINQ. LINQ còn được ứng dụng để sử dụng trong các loại dữ liệu khác, ví dụ như LINQ to SQL, LINQ to Object. Nếu biết sử dụng tính năng mới này thì chúng ta có thể giảm đáng kể thời gian rút trích dữ liệu và tập trung vào phần xử lý.

Chia sẻ:

Thư điện tử

Tweet

Like this:

Số lượt thích

Đang tải…