Xem Nhiều 1/2023 #️ Xử Lý Xml Trong C# # Top 6 Trend | Bothankankanhatban.com

Xem Nhiều 1/2023 # Xử Lý Xml Trong C# # Top 6 Trend

Cập nhật thông tin chi tiết về Xử Lý Xml Trong C# mới nhất trên website Bothankankanhatban.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.

Để sử dụng XML trên C#:

using System.Xml.Linq;

Cấu trúc cơ bản:

XML được xây dựng dựa vào cấu trúc các node lồng nhau, mỗi node sẽ có 1 thẻ mở và đóng. Thông thường XML có cấu trúc gồm:

Trong C#: Xdocument chứa 1 list XELement Cho một file xml như sau:

Trong văn bản XML trên:

Students là node root

Student là node con đại diện cho 1 record

Student có 1 attribute là Id

Student có 3 node con(element) là Name, Gender, TotalMarks

Đọc file XML bằng Linq

string path = @"D:LuyenTapWSC181019xmlStudent.xml"; XDocument xDocument = XDocument.Load(path); { id = o.Attribute("Id").Value, name = o.Element("Name").Value, gender = o.Element("Gender").Value }).ToList(); int i = 0; foreach (var item in data) { listView1.Items.Add(item.id); listView1.Items[i].SubItems.Add(item.name); listView1.Items[i].SubItems.Add(item.gender); i++; }

Ở đây mình đọc file và hiển thị dữ liệu lên thông qua listview

Descendants: Parse file xml để query linq, giá trị đặt trong Descendants thường là node con chứa các Attribute và Element để truy vấn.Descendants sẽ duyệt hết file tìm những phần tử có Tên trùng với “Student” tạo thành 1 list. VD trên list sẽ có 4 students, mỗi student sẽ có các thuộc tính riêng, muốn truy cập phải dùng attribute hoặc element.

Cơ chế câu query trên sẽ duyệt tất cả các node “Student” thõa điều kiện.

Nếu trong Node có chứa các node khác thì chỉ cần x.Element(“tên node”) kết quả sẽ xuất ra dữ liệu, tiếp tục truy vấn

Thêm dữ liệu XML

string path = @"D:LuyenTapWSC181019xmlStudent.xml"; XDocument xDocument = XDocument.Load(path); XElement xElement = new XElement("Student"); xElement.SetAttributeValue("Id", 225); xElement.SetElementValue("Name", "Phuc"); xElement.SetElementValue("Gender", "Male"); xElement.SetElementValue("TotalMarks", 100); xDocument.Element("Students").Add(xElement); xDocument.Save(path);

Xelement: Tạo record Student mới

Id phải unique để dễ phân biệt với các Id của node khác

Ý tưởng: Lúc đầu vẫn load dựa trên đường dẫn path, sau đó tạo một đối tượng element có tên xElement. Set các AttributeValue và ElementValue cho đối tượng, sau đó lưu record Student vừa tạo vào node root Students và save lại theo đường dẫn.

Đối với file chưa có sẵn

Readmore: https://www.mastercode.vn/blog/web-development/bai-9-serialization-nen-tang-lap-trinh-c.57

Xóa dữ liệu XML

string path = @"D:LuyenTapWSC181019xmlStudent.xml"; XDocument xDocument = XDocument.Load(path); studentFilter.Remove(); xDocument.Save(path); LoadData();

Ý tưởng: truy vấn để tất cả record Student để tìm ra 1 record thõa mãn. Và dùng hàm Remove() để xóa record vừa tìm được và cập nhật lại file.

Sửa dữ liệu XMLTương tự như xóa:

string path = @"D:LuyenTapWSC181019xmlStudent.xml"; XDocument xDocument = XDocument.Load(path); xDocument.Save(path); LoadData();

Share this:

Twitter

Facebook

Like this:

Like

Loading…

Đọc Ghi Dữ Liệu Xml Trong C#

Trong một số trường hợp, việc lưu trữ giữ liệu vào các file XML là giải pháp tốt nhất, chúng thường được sử dụng để lưu trữ các thiết đặt hiển thị hoặc một số thông tin không cần bảo mật. Tương tự như với file text, tuy nhiên nó được tổ chức theo một cấu trúc dữ liệu và dễ dàng truy vấn sử lý hơn file thông thường. Bài viết sau đây mình sẽ chia sẻ với bạn cách để thêm, xóa, sửa dữ liệu XML (CRUD XML in C#) trong ngôn ngữ lập trình C#.

Cấu trúc tệp dữ liệu XML

Đầu tiên bạn cần tạo ra một cấu trúc dữ liệu XML.

Thiết kế giao diện và import thư viện xử lý XML trong C#

Trong phần thiết kế này mình sử dụng những control cơ bản như textbox, button, và listview để hiển thị dữ liệu. Thiết kế như hình sau.

Tiếp theo mình sẽ import thư viện sử lý XML đó là using System.Xml.Linq;.

Bây giờ mình sẽ đi qua từng chức năng thao tác với XML trong C#.

Đọc dữ liệu từ XML và hiển thị trên ListView trong C#

Đầu tiền chúng ta sẽ khai báo một biến lưu đường dẫn đến tệp file xml cần xử lý. mình khai báo như sau:

private string path = "..\..\TestData.xml";

mình sử dụng “..\..\ ” là vì tệp xml này đang nằm ở ngoài thư mục gốc. Nếu debug nó sẽ không tìm thấy file này trong thư mục Debug nên bạn phải ra ngoài 2 lần (mục debug nằm trong bin/debug).

Bây giờ mình sẽ tạo một hàm để load dữ liệu như sau.

private void loaddata() { try { listView1.Items.Clear(); DataSet dataSet = new DataSet(); dataSet.ReadXml(path); DataTable dt = new DataTable(); dt = dataSet.Tables["Student"]; int i = 0; foreach (DataRow dr in dt.Rows) { listView1.Items.Add(dr["ID"].ToString()); listView1.Items[i].SubItems.Add(dr["Name"].ToString()); listView1.Items[i].SubItems.Add(dr["Age"].ToString()); i++; } } catch (Exception) { } }

Hàm trên mình kết hợp tải dữ liệu và đọc vào Listview. Trong hàm trên mình sử dụng dataset để đọc dữ liệu từ XML qua tệp được khai báo trong biến Path. Mình tạo thêm một datatable để lấy dữ liệu từ item Student. Cuối cùng mình sử dụng một hàm Foreach đọc dữ liệu từ datatable và đưa vào các Items của Listview. Lưu ý là mình có sử dụng hàm bẫy lỗi Try...Catch... để hạn chế lỗi khi tệp XML bị vấn đề. Sau khi viết xong hàm bạn có thể gọi hàm này từ form load và test thử.

Thêm dữ liệu từ XML trong C#

Khi thêm dữ liệu, bạn phải chú ý thêm ID làm sao đó để nó khác với các ID còn lại. Thông thường mình sẽ sử dụng thời gian, chuyển đổi thành các chuỗi nối với nhau tạo ra một dãy số khác nhau theo thời gian để làm ID. Đoạn code sau mình viết trong nút thêm.

string day = DateTime.Now.Day.ToString(); string month = DateTime.Now.Month.ToString(); string year = DateTime.Now.Year.ToString(); string hour = DateTime.Now.Hour.ToString(); string minute = DateTime.Now.Minute.ToString(); string second = DateTime.Now.Second.ToString(); long id = long.Parse(day + month + year + hour + minute + second); try { XDocument testXML = XDocument.Load(path); XElement newStudent = new XElement("Student", new XElement("Name", textBox1.Text), new XElement("Age",textBox2.Text)); var lastStudent = testXML.Descendants("Student").Last(); long newID = Convert.ToInt64(lastStudent.Attribute("ID").Value); newStudent.SetAttributeValue("ID", id); testXML.Element("Students").Add(newStudent); testXML.Save(path); loaddata(); } catch (Exception err) { MessageBox.Show(err.Message); }

Trong đoạn code thêm trên mình sử dụng kết hợp một chuỗi, ngày+tháng+năm+giờ+phút+giây để làm ID. Nếu bạn thấy dữ liệu được ghi vào nhiều hơn có thể sử dụng thêm mili giây. Tất cả mình sẽ đưa về một biến kiểu long có tên là ID.

Tiếp theo bạn khai báo một document có tên là testXML hay cái gì tùy và đưa đường dẫn file XML vào, sau đó mình sẽ tạo ra một đối tượng Element có tên là newStudent sau đó truyền vào các thuộc tính Element con như Name và Age. Mình sẽ sử dụng SetAttributeValue để chèn ID vào id trong tag Student. Cuối cùng là mình add cái Element newStudent vào bảng Students và save lại theo đường dẫn path. Khúc cuối mình có gọi lại hàm loaddata để lấy dữ liệu lên lại hiển thị trên listview. Mình cũng sẽ để toàn bộ mã này trong hàm Try...Catch... để theo dõi lỗi phát sinh.

Xóa dữ liệu từ XML trong C#

Trước khi muốn xóa dữ liệu bạn phải biết được ID cần xóa của dòng dữ liệu đó. Trong một số phần mềm được thiết kế tinh tế, người ta không show ra loại ID này vì nó không có nghĩa với người dùng. Người dùng cũng không muốn gõ một đoạn số dài để xóa, vì thế nên mình cần có một thao tác đặt biệt để lấy ID của trường muốn xóa trước. Điều này cũng được áp dụng cho việc sửa.

Trong bài này mình sử dụng Listview nên mình sẽ sử dụng sự kiện SelectedIndexChanged của nó và viết một đoạn code như sau.

foreach (ListViewItem item in listView1.SelectedItems) { chúng tôi = item.SubItems[1].Text; chúng tôi = item.SubItems[2].Text; chúng tôi = item.SubItems[0].Text; }

Đoạn tên có thể dễ hiểu là mình sẽ lặp những Item trong cái dòng được selected và lưu vào biến item biến này là một mảng chứa nhiều trường được đánh số từ 0 trở lên. Bạn có thể nhấn vào listview và chọn edit colum để chỉnh sửa các trường phù hợp.

Các trường này mình sẽ lấy dữ liệu lên các textbox phục vụ cho mục đích sửa sau này luôn ID bạn có thể dùng một biến để lưu lại hoặc cho nó show ra luôn cho dễ kiểm soát.

Sau khi đã lấy được ID lên textbox, mình tiến hành viết code cho nút xóa để xóa dữ liệu xác định.

try { if (textBox3.Text != "1112201518597") { XDocument testXML = XDocument.Load(path); cStudent.Remove(); testXML.Save(path); loaddata(); } else { MessageBox.Show("vui lòng không xóa trường này !"); } } catch (Exception err) { MessageBox.Show(err.Message); }

Trong đoạn này mình có sử dụng một hàm if để kiểm tra và không cho xóa dòng có ID đầu tiên. Dĩ nhiên bạn có nhiều cách khác như kiểm tra nếu dữ liệu chỉ có một dòng thì không cho xóa,… nhưng ở đây mình làm nhanh. Tiếp theo như thông thường mình sẽ tạo ra một document có tên testXML và load đường dẫn file XML lên, sau đó mình sẽ sử dụng một câu truy vấn Linq để lấy ra một element có ID như yêu cầu, sau đó là sử dụng phương thức Remove() để xóa element này đi và cuối cùng là save nó lại và load dữ liệu thay đổi lên. Mình vẫn sử dụng hàm try…catch để bắt lỗi xảy ra.

Sửa dữ liệu từ XML trong C#

Cũng tương tự như xóa, mình cũng cần lấy ID và các nội dung cũ lên để người dùng sửa. Tuy nhiên mình sẽ không cần viết lại nữa thì ở trên mình đã viết rồi. bây giờ mình sẽ code cho nút sửa như sau:

try { XDocument testXML = XDocument.Load(path); cStudent.Element("Name").Value = textBox1.Text; cStudent.Element("Age").Value = textBox2.Text; testXML.Save(path); loaddata(); } catch (Exception err) { MessageBox.Show(err.Message); }

Load File Xml Bằng C# Và Linq

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…

Phần 20: Xử Lý Form (Biểu Mẫu) Trong Php

Để lấy dữ liệu từ 1 form trong PHP, bạn có thể dùng 2 biến dạng toàn cục là $_GET và $POST.

Ví dụ 1 form đơn giản

Ví dụ sau thể hiện 1 form HTML đơn giản với 2 trường nhập liệu và 1 nút nhấn submit. Tạo trang tên là index.html với nội dung sau.

</body

Trong ví dụ trên, khi người dùng điền vào thông tin và nhấn nút submit, dữ liệu form sẽ được gửi đến tập tin chúng tôi để xử lý. Điều này là do thuộc tính action=”dammio.php” thiết lập trang xử lý, bạn có thể để action=”” tức là trang chứa form này xử lý (trang chúng tôi trong ví dụ). Hơn nữa, dữ liệu gửi đến form thông qua phương thức HTTP POST.

Để hiển thị dữ liệu từ form của trang index.html, ở trang chúng tôi cùng thư mục. Bạn chỉ cần dùng lệnh echo để hiển thị như sau.

Tương tự, bạn cũng có thể dùng phương thức HTTP GET với form trên như sau. Tạo 1 trang tên index_get.html với nội dung.

</body

Sau đó tạo trang dammio_get.php để lấy dữ liệu form bằng phương thức GET.

Khi nào dùng GET, khi nào dùng POST

Ở ví dụ trên, bạn có thể thấy có 2 cách để lấy dữ liệu form là GET và POST. Vậy bạn sẽ băn khoăn là khi nào dùng GET, và khi nào dùng POST. Như bài viết trước, khi 1 form dùng POST thì dữ liệu sẽ được submit ngầm, còn 1 form dùng GET thì dữ liệu khi submit sẽ hiển thị trên URL.

Ví dụ URL của 1 form khi dùng GET:

http://localhost:8080/index_get.html?name=Dammio&[email protected]

Vấn đề quan trọng là bạn phải kiểm tra dữ liệu trả về server có chứa đoạn mã độc hay không, phần này bạn có thể dùng 1 số hàm chẳng hạn như htmlspecialchars() để lọc ký tự mã HTML đặc biệt nhằm hạn chế mã độc. Bạn cũng có kiểm tra độ dài dữ liệu, loại dữ liệu, IP submit, … để tăng cường khả năng bảo mật.

Nếu ứng dụng web của bạn chỉ dùng HTTP thì rất tiếc, ngay cả khi bạn dùng POST thì form cũng không thể bảo mật. Một số bài viết đã chỉ ra cách có thể dùng trình duyệt để xem dữ liệu form submit dạng POST. Vì vậy cách tốt nhất hãy dùng HTTPS.

Kết luận

Bài viết đã hướng dẫn bạn cách tạo 1 form đơn giản và lấy dữ liệu form này bằng 2 biến toàn cục $_GET và $_POST trong PHP. Mời bạn tiếp tục theo dõi bài tiếp theo để học được cách tạo form chi tiết và đa dạng hơn.

Bạn đang xem bài viết Xử Lý Xml Trong C# trên website Bothankankanhatban.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!