• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

XML trong .NET

Các bài viết hướng dẫn về Visual Basic .NET và C#

Điều hành viên: tungcan5diop, QUANITGROBEST

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:30 am

Tên bài viết: XML trong .NET
Tác giả: Sưu tầm
Cấp độ bài viết: Chưa đánh giá
Tóm tắt:



KỲ 1
MỞ MỘT TÀI LIỆU XML


Để mở một tài liệu XML, bạn cần sử dụng lớp XmlDocument. Lớp XmlDocument cho phép bạn mở tài liệu XML theo 3 cách thông dụng sau:
-Bạn có thể mở thông qua 1 đường dẫn trên ổ cứng, một URL, hoặc 1 tập tin XML.
-Bạn có thể sử dụng đối tượng stream như FileStream chứa dữ liệu của tài liệu XML.
-Bạn có mở thông qua 1 chuỗi chứa XML trong bộ nhớ

Để thấy được các đặc tính này, trong kỳ 1 này, chúng ta cùng làm thử 1 ứng dụng nhỏ như con thỏ nhé:

Hình ảnh


Ứng dụng của chúng ta bao gồm: 3 radio button cho việc chọn nơi chứa tài liệu mà lớp XmlDocument sẽ mở. 1 textbox dùng để nhập đường dẫn đến tập tin xml, hoặc URL hoặc 1 string chứa chuỗi XML. Cuối cùng là 1 button dùng để thực thi các câu lệnh để mở tài liệu. Sau đây là đoạn code thụ lý tình huống Click của button:

Mã: Chọn hết

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Try
  3.             Dim path As String = TextBox1.Text
  4.             Dim document As New XmlDocument
  5.             If RadioButton1.Checked = True Then
  6.                 document.Load(path)
  7.             End If
  8.             If RadioButton2.Checked = True Then
  9.                 Dim fs As System.IO.FileStream
  10.                 fs = System.IO.File.OpenRead(path)
  11.                 document.Load(fs)
  12.             End If
  13.             If RadioButton3.Checked = True Then
  14.                 document.Load(path)
  15.             End If
  16.             MessageBox.Show("Mở tài liệu XML thành công!")
  17.         Catch ex As Exception
  18.             MessageBox.Show(ex.Message)
  19.         End Try
  20.     End Sub


Đoạn code trên tạo 1 thể hiện của lớp XmlDocument. Lớp này có 2 phương thức quan trọng là: Load() và LoadXml(). Như bạn đã thấy, các đối số mà phương thức Load() nhận có thể là: 1 chuỗi chứa URL chứa tài liệu xml, hoặc 1 stream, hoặc 1 chuỗi chứa tài liệu XML.
Ở đây, có điều cần lưu ý với các bạn là: nhớ imports namespace: System.Xml nhé, vì đây chính là namespace chứa class XmlDocument, và là 1 trong các namespace chủ lực của .NET hỗ trợ làm việc với XML.

Các bạn download tập tin employees.xml mẫu để thực hành tại đây nhé:

Employees.rar
(800 Byte) Đã tải 1517 lần
Sửa lần cuối bởi neverland87 vào ngày T.Năm 06/08/2009 9:37 pm với 1 lần sửa.


SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:32 am

KỲ 2
DI CHUYỂN XUYÊN QUA TÀI LIỆU XML


Một tài liệu XML bao gồm 1 hoặc nhiều nút, và có những nút nằm bên trong nút khác. Những nút nằm bên trong nút khác gọi là nút con.
Lớp XmlNode có 1 tập hợp gọi là ChildNodes mà chứa danh sách tất cả các nút con của một nút bất kỳ. Ngoài ra, chúng còn có các thuộc tính: ParentNode, FirstChild, LastChild, NextSibling và PreviousSibling mà cho phép bạn di chuyển đến bất kỳ nút nào. Như thuộc tính ParentNode giúp bạn di chuyển đến nút cha của 1 nút nào đó, hoặc thuộc tính NextSibling giúp bạn di chuyển đến nút kế tiếp ở cùng cấp của nút hiện hành.

Kỳ này, chúng ta cũng thử làm 1 project nhỏ:

Hình ảnh


Ứng dụng của chúng ta chỉ có 1 treeview. Mục đích của chúng ta là hiển thị cấu trúc của tập tin XML lên treeview lúc chương trình được Load lên.

Sau đây là đoạn mã thụ lý tình huống Load của Form chính:

Mã: Chọn hết

  1.  
  2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  3.         Dim path As String = Application.StartupPath & "\employees.xml"
  4.         Dim document As New XmlDocument
  5.         document.Load(path)
  6.         Dim rootnode As TreeNode = TreeView1.Nodes.Add(document.DocumentElement.Name)
  7.         Dim nodes As XmlNodeList = document.DocumentElement.ChildNodes
  8.         For Each childnode As XmlNode In nodes
  9.             Dim empNode As New TreeNode(childnode.Name & ":" & childnode.Attributes("employeeid").Name & "=" & childnode.Attributes("employeeid").Value)
  10.             For Each node As XmlNode In childnode.ChildNodes
  11.                 If node.Name = "firstname" Then
  12.                     empNode.Nodes.Add("First Name:" & node.InnerText)
  13.                 End If
  14.                 If node.Name = "lastname" Then
  15.                     empNode.Nodes.Add("Last Name:" & node.InnerText)
  16.                 End If
  17.                 If node.Name = "homephone" Then
  18.                     empNode.Nodes.Add("Home Phone:" & node.InnerText)
  19.                 End If
  20.                 If node.Name = "notes" Then
  21.                     empNode.Nodes.Add("Notes:" & node.InnerText)
  22.                 End If
  23.             Next
  24.             rootnode.Nodes.Add(empNode)
  25.         Next
  26.     End Sub


Lưu ý: Nhớ import namespace System.Xml

Đoạn code tạo 1 thể hiện của lớp XmlDocument và nạp tập tin employees.xml được đặt trong cùng thư mục của file thực thi của chương trình. Nút gốc của tài liệu xml có thể được truy cập thông qua thuộc tính DocumentElement của đối tượng thể hiện của lớp XmlDocument. Thuộc tính Name của DocumentElement trả về tên của nút gốc này (employees).

Nút employees chứa 3 nút employee, để truy cập 3 nút này, ta dùng thuộc tính ChildNodes của DocumentElement mà ta đã nói ở trên. Tà dùng vòng lặp foreach để đi lần lượt qua từng nút employee một.

Để truy cập attribute employeeid, ta sử dụng collection Attribute của lớp XmlNode. Bạn có thể xác định attribute nào cần lấy thông qua chỉ mục hoặc tên của nó.
Để nhận được chuỗi nằm giữa 1 cặp tag, ta dùng thuộc tính InnerText của XmlNode.
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:35 am

KỲ 3
NHẬN CÁC PHẦN TỬ BẤT KỲ BẰNG CÁCH SỬ DỤNG PHƯƠNG THỨC GetElementByTagName()


Lớp XmlDocument có phương thức GetElementByTagName() giúp bạn tìm ra những node có tag do bạn chỉ định. Chẳng hạn, trong employees.xml có 3 nút employee. Mình nhập chuỗi "employee" thì nó sẽ trả về cho mình 3 nút này dễ dàng. Cùng làm thử 1 ứng dụng với mình nhé!

Hình ảnh


Ứng dụng của chúng ta gồm 1 textbox để nhập tên tag cần lấy, 1 listbox để hiện thi danh sách các nút có tag tìm được, 1 textbox để hiển thị nội dung của nút đó. Và 1 button để thực thi câu lệnh dùng để lấy nút thông qua tên tag.

Trước khi thụ lý, tình huống Click của button, bạn cần khai báo 1 biến thành viên của class như sau:

Mã: Chọn hết

  1. Dim nodelist As XmlNodeList


XmlNodeList là 1 class dùng để chứa 1 tập hợp các lớp. (tựa giống thằng ArrayList thôi). Không có gì phải quan trọng, nghĩ xa xôi về nó

Bây giờ mới đến lúc thụ lý tình huống Click của button nè:

Mã: Chọn hết

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         'làm sạch listbox
  3.         ListBox1.Items.Clear()
  4.         'mở tài liệu XML
  5.         Dim doc As New XmlDocument
  6.         doc.Load(Application.StartupPath + "\employees.xml")
  7.         'đưa tất cả các nút tìm được qua tên tag
  8.         'vào nodelist
  9.         nodelist = doc.GetElementsByTagName(TextBox1.Text)
  10.         'đi lần lượt qua từng node cuaa nodelist
  11.         'và đưa nó vào listbox
  12.         For Each node As XmlNode In nodelist
  13.             ListBox1.Items.Add(node.Name)
  14.         Next
  15.     End Sub


Bây giờ, mỗi lần người dùng chọn 1 tên nút trên listbox thì giá trị của nút đó sẽ được hiển thị trên textbox kia thì ta cần thụ lý tình huống SelectedIndexChanged của listbox:

Mã: Chọn hết

  1. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
  2.         TextBox2.Text = nodelist(ListBox1.SelectedIndex).InnerText
  3.     End Sub
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:37 am

KỲ 4
CHỌN NHIỀU NÚT BẤT KỲ BẰNG CÁCH SỬ DỤNG PHƯƠNG THỨC SelectNodes()


Lớp XmlDocument có phương thức SelectNodes() mà chấp nhận 1 chuỗi chứa câu truy vấn để tìm lọc ra những nút mà bạn muốn, nó sẽ trả về đối tượng XmlNodeList chứa danh sách tất cả các nút thỏa mãn điều kiện truy tìm.
Để hiểu rõ phương thức này, chúng ta cùng làm thử 1 ứng dụng nhỏ:

Hình ảnh


Ứng dụng của chúng ta bao gồm:
-1 textbox để điền tên của 1 người nào đó
-2 radio button: 1 để chọn tìm kiếm theo tên, 1 để chọn tìm kiếm theo họ.
-2 button
-10 textbox
-1 combobox để hiện thị mã nhân viên (employeeid) tương ứng với ông nhân viên mà bạn tìm.

Trước khi thụ lý các tình hướng, bạn làm:
-Imports System.Xml
-Khai báo 1 biến thành viên:
Dim nodelist As XmlNodeList
-Thụ lý tình huống Click của nút “Tìm”:

Mã: Chọn hết

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         'mở tập tin employees.xml
  3.         Dim doc As New XmlDocument
  4.         doc.Load(Application.StartupPath + "\employees.xml")
  5.         'nếu chọn radio button "Tên"
  6.         If RadioButton1.Checked = True Then
  7.             'chọn phần tử employee nào
  8.             'mà có ông con firstname nào = <textbox1.Text>
  9.             'trả về các nút employee hợp lệ vào biến nodelist
  10.             nodelist = doc.SelectNodes("/employees/employee[./firstname/text() = '" + TextBox1.Text + "']")
  11.         End If
  12.         'nếu chọn radio button "Họ"
  13.         If RadioButton2.Checked Then
  14.             'chọn phần tử employee nào
  15.             'mà có ông con lastname nào = <textbox1.Text>
  16.             'trả về các nút employee hợp lệ vào biến nodelist
  17.             nodelist = doc.SelectNodes("/employees/employee[./lastname/text() = '" + TextBox1.Text + "']")
  18.         End If
  19.         'đi xuyên qua các nút employee
  20.         'của tập hợp các nút employee vừa tìm được ở trên
  21.         For Each node As XmlNode In nodelist
  22.             ComboBox1.Items.Add(node.Attributes("employeeid").Value)
  23.         Next
  24.         ComboBox1.SelectedIndex = 0
  25.     End Sub


Ở đoạn code tên không có gì đáng phải bàn nhiều, duy câu truy vấn là đáng bàn, bạn cứ hình dung bạn tìm 1 nút thông qua 1 đường dẫn khởi phát từ nút nguồn của tài liệu (employees).
/employees/employee[./firstname/text() = '" + TextBox1.Text + "']"
Nhu vậy, ta dịch câu truy vấn này như sau: “hãy cho tôi các nút employee mà có firstname = 1 tên chỉ định trong textbox1.
Hàm text() là hàm trả về đoạn text của 1 nút (ở đây là nút firstname).
Bạn lưu ý là nó sẽ trả về các nút employee, chứ không phải các nút firstname hay lastname gì đâu nhé.

Lúc này, nếu tìm được các nút thỏa điều kiện, user sẽ chọn mã số nhân viên trong combobox, và nhấn nút “Hiển thị” để cho biết các thông tin của nhân viên ứng với mã số nhân viên đó. Vậy, ta có đoạn code thụ lý tình huống Click của nút “Hiển thị” như sau:

Mã: Chọn hết

  1.  
  2. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  3.         'label FirstName = giá trị nằm giữa cặp tag <firstname>...</firstname>
  4.         Label8.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(0).InnerText
  5.         'label LastName = giá trị nằm giữa cặp tag <lastname>...</lastname>
  6.         Label9.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(1).InnerText
  7.         'label HomePhone = giá trị nằm giữa cặp tag <homephone>...</homephone>
  8.         Label10.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(2).InnerText
  9.         'label notes = giá trị nằm giữa cặp tag <notes>...</notes>
  10.         Label11.Text = nodelist(ComboBox1.SelectedIndex).ChildNodes(3).InnerText
  11.     End Sub
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:39 am

KỲ 5
CHỌN MỘT NÚT BẤT KỲ BẰNG CÁCH SỬ DỤNG PHƯƠNG THỨC SelectSingleNode()


Ở kỳ 4, bạn đã được biết qua chức năng của phương thức SelectNodes() của class XmlDocument, nhưng cũng có nhiều lúc bạn chỉ muốn chọn một nút mà thôi. Tất nhiên là vẫn có thể dùng SelectNodes(), tuy nhiên có vẻ không hợp lý lắm. Bởi thế, class XmlNode còn cung cấp cho bạn phương thức SelectSingleNode() cho việc chọn 1 nút.
Để dễ dàng theo dõi, mình post lại nội dung của tập tin employees.xml:

Mã: Chọn hết

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!-- This is list of employees -->
  3. <employees>
  4.   <employee employeeid="1">
  5.     <firstname>Nancy</firstname>
  6.     <lastname>Davolio</lastname>
  7.     <homephone>(206) 555-9857</homephone>
  8.     <notes>
  9.       <![CDATA[includes a BA in psychology from Colorado State University in 1970. She also completed "The Art of the Cold Call." Nancy is a member of Toastmasters International.]]>
  10.   </notes>
  11.   </employee>
  12.   <employee employeeid="2">
  13.     <firstname>Andrew</firstname>
  14.     <lastname>Fuller</lastname>
  15.     <homephone>(206) 555-9482</homephone>
  16.     <notes>
  17.       <![CDATA[Andrew received his BTS commercial in 1974 and a Ph.D. in international marketing from the University of Dallas in 1981.  He is fluent in French and Italian and reads German. He joined the company as a sales representative, was promoted to sales manager in January 1992 and to vice president of sales in March 1993. Andrew is a member of the Sales Management Roundtable, the Seattle Chamber of Commerce, and the Pacific Rim Importers Association.]]>
  18.     </notes>
  19.   </employee>
  20.   <employee employeeid="3">
  21.     <firstname>Janet</firstname>
  22.     <lastname>Leverling</lastname>
  23.     <homephone>(206) 555-3412</homephone>
  24.     <notes>
  25.       <![CDATA[Janet has a BS degree in chemistry from Boston College (1984). She has also completed a certificate program in food retailing management.  Janet was hired as a sales associate in 1991 and promoted to sales representative in February 1992.]]>
  26.     </notes>
  27.   </employee>
  28. </employees>


Ví dụ minh họa của kỳ này: chúng ta sẽ sửa đổi 1 chút xíu ở ví dụ minh họa kỳ 4, vì đơn giản SelectSingleNode() cũng ko khác chi mấy so với SelectNodes(). Bạn chỉ cần sửa lại đoan code ở những phần sau:
- Thay thế biến thành viên:
Dim nodelist As XmlNodeList
bằng biến thành viên này:
Dim nodeSelect As XmlNode
- Thay thế đoạn mã thụ lý tình huống Click của nút "Tìm" bằng đoạn mã mới này:

Mã: Chọn hết

  1.  
  2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  3.         Dim doc As New XmlDocument
  4.         doc.Load(Application.StartupPath + "\employees.xml")
  5.         If RadioButton1.Checked = True Then
  6.             nodeSelect = doc.SelectSingleNode("/employees/employee[./firstname/text() = '" + TextBox1.Text + "']")
  7.         End If
  8.         If RadioButton2.Checked Then
  9.             nodeSelect = doc.SelectSingleNode("/employees/employee[./lastname/text() = '" + TextBox1.Text + "']")
  10.         End If
  11.         If nodeSelect IsNot Nothing Then
  12.             ComboBox1.Items.Add(nodeSelect.Attributes("employeeid").Value)
  13.         End If
  14.         ComboBox1.SelectedIndex = 0
  15.     End Sub


-Thay thế đoạn mã thụ lý tình huống Click của nút "Hiển thị" bằng đoạn mã mới này:

Mã: Chọn hết

  1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  2.         Label8.Text = nodeSelect.ChildNodes(0).InnerText
  3.         Label9.Text = nodeSelect.ChildNodes(1).InnerText
  4.         Label10.Text = nodeSelect.ChildNodes(2).InnerText
  5.         Label11.Text = nodeSelect.ChildNodes(3).InnerText
  6.     End Sub


Quả thật, không có chi khó hiểu với phương thức này, chỉ nhớ là SelectSingleNode() chỉ cho ta chọn 1 nút mà thôi! Do đó, nếu có nhập "Nancy" và trong tài liệu có nhiều nhân viên thì cũng chỉ nhận được 1 nhân viên tên Nancy mà tài liệu tìm thấy trước tiên thôi!
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:43 am

KỲ 6
THÊM, XÓA, CẬP NHẬT NÚT TRONG TÀI LIỆU XML


Cho đến thời điểm này, có lẽ các bạn cũng đã khá rành cách chọn 1 nút trên tài liệu, nhưng đã chọn được rồi, thì tất nhiên là sẽ có những lúc bạn muốn thêm, xóa hoặc chỉnh sửa 1 nút nào đó. Trong kỳ này, mình sẽ hướng dẫn các bạn xử lý những vấn đề này.
Chúng ta sẽ làm thử 1 ứng dụng như hình dưới:

Hình ảnh


Ứng dụng của chúng ta gồm:
-6 label, trong đó label6 là label dùng để hiện thị vị trí của nút hiện hành (lblRecord).
-1 combobox để hiện mã số nhân viên
-4 textbox dùng để hiện thị thông tin nhân viên
-3 button tương ứng với 3 tính năng: thêm,cập nhật, xóa.
-4 button để di chuyển trên tài liệu: về đầu, lùi 1 nút, tăng 1 nút, về cuối.

Đầu tiên, bạn nhớ Imports System.Xml rồi sau đó khai báo 2 biến thành viên:

Mã: Chọn hết

  1. Dim chimuc As Integer = 0
  2. Dim doc As New XmlDocument


Thụ lý tình huống Load của của Form:

Mã: Chọn hết

  1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         doc.Load(Application.StartupPath + "\employees.xml")
  3.         For Each node As XmlNode In doc.DocumentElement.ChildNodes
  4.             cboEmployeeID.Items.Add(node.Attributes("employeeid").Value)
  5.         Next
  6.         cboEmployeeID.SelectedIndex = 0
  7.         FillControls()
  8.         UpdateLabel()
  9.     End Sub


Trong Form1_Load, bạn thấy đơn giản là chúng ta cho mở tập tin employees.xml, sau đó tìm đến nút nguồn của tài liệu (employees), tìm và thêm các attribute employeeid của nút employee vào combobox. Rồi cho chọn phần tử đầu tiên của combobox.
Kế đến là 2 phương thức FillControls (điền đầy thông tin nhân viên vào các textbox thông tin) và UpdateLabel (cập nhật vị trí nút trên lblRecord). 2 phương thức này, tí nữa chúng ta sẽ xây dựng.

Bây giờ, chúng ta tiếp tục thụ lý tình huống Click cho 4 button di chuyển trên tài liệu:

Mã: Chọn hết

  1. Private Sub btnFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFirst.Click
  2.         chimuc = 0
  3.         FillControls()
  4.         UpdateLabel()
  5.     End Sub


Mã: Chọn hết

  1.  
  2. Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click
  3.         chimuc = chimuc - 1
  4.         If chimuc < 0 Then
  5.             chimuc = 0
  6.         End If
  7.         FillControls()
  8.         UpdateLabel()
  9.     End Sub


Mã: Chọn hết

  1. Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
  2.         chimuc = chimuc + 1
  3.         If chimuc >= doc.DocumentElement.ChildNodes.Count - 1 Then
  4.             chimuc = doc.DocumentElement.ChildNodes.Count - 1
  5.         End If
  6.         FillControls()
  7.         UpdateLabel()
  8.     End Sub


Mã: Chọn hết

  1. Private Sub btnLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLast.Click
  2.         chimuc = doc.DocumentElement.ChildNodes.Count - 1
  3.         FillControls()
  4.         UpdateLabel()
  5.     End Sub


Giờ đây, chúng ta bắt đầu xây dựng 2 phương thức FillControl và UpdateLabel để hoàn tất nửa chặng đường đầu tiên:

Mã: Chọn hết

  1. 'Fill Controls
  2.     Public Sub FillControls()
  3.         'node = nút con thứ <chimuc> của nút gốc của tài liệu
  4.         Dim node As XmlNode = doc.DocumentElement.ChildNodes(chimuc)
  5.         'combobox mã số nhân viên = giá trị của attribute employeeid của nút con vừa tìm
  6.         cboEmployeeID.Text = node.Attributes("employeeid").Value
  7.         'gán chuỗi nằm giữa cặp tag đóng-mở cho các textbox thông tin
  8.         txtFirstName.Text = node.ChildNodes(0).InnerText
  9.         txtLastName.Text = node.ChildNodes(1).InnerText
  10.         txtHomePhone.Text = node.ChildNodes(2).InnerText
  11.         txtNotes.Text = node.ChildNodes(3).InnerText
  12.     End Sub


Mã: Chọn hết

  1.    'Update Label
  2.     Public Sub UpdateLabel()
  3.         'doc.Document.ChildNodes.Count = số nút con của nút gốc của tài liệu
  4.         lblRecord.Text = (chimuc + 1).ToString & "/" & doc.DocumentElement.ChildNodes.Count
  5.     End Sub


Nửa chặng đường tiếp theo chúng ta bắt đầu lo cho việc thêm,xóa, sửa thông tin cho nút:

Dễ nhất là cập nhật (UPDATE) thông tin cho một nút:

-Đoạn mã thụ lý tình huống Click của button UPDATE:

Mã: Chọn hết

  1. Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
  2.         'chọn 1 nút tương ứng  với mã nhân viên được chọn từ cboEmployeeID
  3.         Dim node As XmlNode = doc.SelectSingleNode("employees/employee[@employeeid = '" & cboEmployeeID.SelectedItem & "']")
  4.         'nếu có nhân viên tương ứng
  5.         If node IsNot Nothing Then
  6.             'gán các giá trị trong các textbox thông tin
  7.             'vào giữa cặp tag đóng-mở của các nút con của nút đang xét
  8.             'ở đây là các tag: firstname,lastname,notes của nút employee
  9.             node.ChildNodes(0).InnerText = txtFirstName.Text
  10.             node.ChildNodes(1).InnerText = txtLastName.Text
  11.             node.ChildNodes(2).InnerText = txtNotes.Text
  12.             'riêng với CData, ta phải làm bằng cách tạo 1 biến kiểu XmlCDataSection
  13.             'phương thức doc.CreateCDataSection sẽ giúp ta tạo 1 CData dựa trên 1 chuỗi được truyền vào phương thức
  14.             Dim notes As XmlCDataSection = doc.CreateCDataSection(txtNotes.Text)
  15.             'thay thế CDataSection cũ là : node.ChildNodes(3).ChildNodes(0)
  16.             'bởi nút notes
  17.             node.ChildNodes(3).ReplaceChild(notes, node.ChildNodes(3).ChildNodes(0))
  18.             'lưu lại tài liệu
  19.             doc.Save(Application.StartupPath + "\employees.xml")
  20.         End If
  21.     End Sub


-Kế đến là công việc xóa nút
Đoạn mã thụ lý tình huống Click của button DELETE:

Mã: Chọn hết

  1.  
  2. Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
  3.         'chọn 1 nút tương ứng  với mã nhân viên được chọn từ cboEmployeeID
  4.         Dim node As XmlNode = doc.SelectSingleNode("employees/employee[@employeeid = '" & cboEmployeeID.SelectedItem & "']")
  5.         'nếu có nhân viên tương ứng
  6.         If node IsNot Nothing Then
  7.             'di chuyển nút employee tương ứng khỏi tài liệu
  8.             'thông qua phương thức RemoveChild(<nut can xoa>)
  9.             'của doc.DocumentElement
  10.             doc.DocumentElement.RemoveChild(node)
  11.         End If
  12.         'lưu lại tài liệu
  13.         doc.Save(Application.StartupPath + "\employees.xml")
  14.         'Cập nhật lại số vị trí của nút
  15.         UpdateLabel()
  16.     End Sub


-Công việc cuối cùng của chúng ta là thêm 1 nút mới vào tài liệu, đoạn mã có thể hơi dài, nhưng cũng không quá khó để hiểu:
Đoạn mã thụ lý tình huống Click của Button ADD

Mã: Chọn hết

  1. Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
  2.         'khai báo các biến phần tử (XmlElement) của tài liệu
  3.         'ứng với tên của chúng được truyền vào phương thức CreateElement
  4.         Dim employee As XmlElement = doc.CreateElement("employee")
  5.         Dim firstname As XmlElement = doc.CreateElement("firstname")
  6.         Dim lastname As XmlElement = doc.CreateElement("lastname")
  7.         Dim homephone As XmlElement = doc.CreateElement("homephone")
  8.         Dim notes As XmlElement = doc.CreateElement("notes")
  9.         'khai báo 1 biến tượng trưng cho attribute employeeid (XmlAttribute)
  10.         'với tên là chuỗi được truyền vào phương thức CreateAttribute
  11.         Dim employeeid As XmlAttribute = doc.CreateAttribute("employeeid")
  12.         'gán giá trị của cboEmployeeID vào
  13.         'biến attribute employeeid vừa tạo
  14.         employeeid.Value = cboEmployeeID.Text
  15.         'khai báo các biến tượng trưng cho chuỗi nằm giữa cặp tag đóng-mở của 1 nút bất kỳ
  16.         'với giá trị là chuỗi được truyền vào phương thức CreateTextNode
  17.         Dim firstnametext As XmlText = doc.CreateTextNode(txtFirstName.Text)
  18.         Dim lastnametext As XmlText = doc.CreateTextNode(txtLastName.Text)
  19.         Dim homephonetext As XmlText = doc.CreateTextNode(txtHomePhone.Text)
  20.         'riêng đối với đoạn văn bản nằm trong tag CData, ta phải làm cách khác với cách XmlText
  21.         'tạo 1 biến kiểu XmlCDataSection
  22.         Dim notestext As XmlCDataSection = doc.CreateCDataSection(txtNotes.Text)
  23.         'phần tử notes thêm notestext vào bản thân nó.
  24.         notes.AppendChild(notestext)
  25.         'phần tử employee thêm attribute employeeid vào bản thân nó
  26.         employee.Attributes.Append(employeeid)
  27.         'cho phần tử employee có các nút con là : firstname,lastname,homephone và notes
  28.         employee.AppendChild(firstname)
  29.         employee.AppendChild(lastname)
  30.         employee.AppendChild(homephone)
  31.         employee.AppendChild(notes)
  32.         'thêm phần tử employee vừa tạo vào nút gốc employees của tài liệu
  33.         doc.DocumentElement.AppendChild(employee)
  34.         'lưu lại tài liệu
  35.         doc.Save(Application.StartupPath + "\employees.xml")
  36.         'cập nhật lại thông tin vị trí của nút
  37.         UpdateLabel()
  38.     End Sub
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 12:46 am

KỲ 7
LIÊN HỆ VỚI KHOẢNG TRẮNG


Từ đầu đến giờ, bạn đã được học về cách đọc và viết tài liệu XML sử dụng lớp XmlDocument. Trong quá trình đọc viết đó, chúng ta khó tránh khỏi sự bực mình với khoảng trắng (là ký tự khoảng trắng,tab,…) vì mặc định khi tài liệu XML được đọc (dùng phương thức Load hoặc LoadXml) hoặc lưu lại (phương thức Save), nó sẽ loại bỏ khoảng trắng (ignore white space). Kỳ này, mình sẽ chỉ cho các bạn cách đối xử đối với lũ khoảng trắng này.

Để dễ thấy sự khác biệt giữa việc loại bỏ hay không loại bỏ khoảng trắng, chúng ta thử làm 1 ví dụ đơn giản như sau:

Hình ảnh


Đây là đoạn mã thụ lý tình huống Click của button:

Mã: Chọn hết

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Dim doc As New XmlDocument
  3.         doc.PreserveWhitespace = CheckBox1.Checked
  4.         doc.Load(Application.StartupPath & "\employees.xml")
  5.         MessageBox.Show(doc.InnerXml)
  6.     End Sub


Dưới đây là hình kết quả trong 2 trường hợp:
-Khi checkbox không được chọn:

Hình ảnh


-Khi checkbox được chọn:

Hình ảnh


Okay, bây giở bạn thử thay thế dòng code:

Mã: Chọn hết

  1. MessageBox.Show(doc.InnerXml)


bởi dòng:

Mã: Chọn hết

  1. MessageBox.Show("Nút employees có: " & doc.DocumentElement.ChildNodes.Count.ToString() & " nút con")
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Sáu 30/05/2008 1:03 am

KỲ 8
LƯU LẠI KÍCH THƯỚC VÀ VỊ TRÍ CỦA FORM VÀO TÀI LIỆU XML


Một yêu cầu phổ biến đối với Form là nhớ lại vị trí và kích thước cuối cùng của nó. Thông thường, thông tin này được lưu trữ trong registry. Tuy nhiên, bài viết này, mình xin chia sẻ thêm 1 cách khác, đó là dùng XML để lưu lại kích thước, vị trí của Form
- Điều đầu tiên các bạn cần làm là thêm vào namespace:

Mã: Chọn hết

  1. using System.Xml;

- Bây giờ, bạn thụ lý tình huống Load của Form như sau:

Mã: Chọn hết

  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             try
  4.             {
  5.                 //trường hợp Form được nạp
  6.                 //trong những lần kế tiếp
  7.                 XmlDocument xmlDoc = new XmlDocument();
  8.                 //nạp cauhinh.xml, lấy thông tin và trả về vị trí trước kia
  9.                 //cho Form
  10.                 xmlDoc.Load("cauhinh.xml");
  11.                 this.Height = int.Parse(xmlDoc.DocumentElement["Height"].InnerText);
  12.                 this.Width = int.Parse(xmlDoc.DocumentElement["Width"].InnerText);
  13.                 this.Left = int.Parse(xmlDoc.DocumentElement["Left"].InnerText);
  14.                 this.Top = int.Parse(xmlDoc.DocumentElement["Top"].InnerText);
  15.             }
  16.             catch
  17.             {
  18.                 //trong trường hợp Form được nạp vào lần đầu tiên
  19.                 //thì sẽ tạo ra cauhinh.xml
  20.                 //và lưu kích thước Form vào
  21.                 int height = this.Height;
  22.                 int width = this.Width;
  23.                 int left = this.Left;
  24.                 int top = this.Top;
  25.                 XmlTextWriter writer = new XmlTextWriter("cauhinh.xml", null);
  26.                 writer.WriteStartDocument();
  27.                 writer.WriteStartElement("cauhinh");
  28.  
  29.                 writer.WriteStartElement("Height");
  30.                 writer.WriteString(height.ToString());
  31.                 writer.WriteEndElement();
  32.  
  33.                 writer.WriteStartElement("Width");
  34.                 writer.WriteString(width.ToString());
  35.                 writer.WriteEndElement();
  36.  
  37.                 writer.WriteStartElement("Left");
  38.                 writer.WriteString(left.ToString());
  39.                 writer.WriteEndElement();
  40.  
  41.                 writer.WriteStartElement("Top");
  42.                 writer.WriteString(top.ToString());
  43.                 writer.WriteEndElement();
  44.  
  45.                 writer.WriteEndElement();
  46.                 writer.WriteEndDocument();
  47.                 writer.Close();
  48.                 //tài liệu XML lúc này có dạng:
  49.                 //<?xml version="1.0" ?>
  50.                 // <cauhinh>
  51.                 //<Height>556</Height>
  52.                 //<Width>697</Width>
  53.                 //<Left>111</Left>
  54.                 //<Top>53</Top>
  55.                 //</cauhinh>
  56.             }
  57.         }
  58.  


- Kế tiếp, bạn thụ lý tình huống FormClosed của Form như sau:

Mã: Chọn hết

  1.  
  2.  private void Form1_FormClosed(object sender, FormClosedEventArgs e)
  3.         {
  4.             //Khi Form được đóng
  5.             //nó sẽ nạp cauhinh.xml
  6.             //để lưu lại kích thước lúc này
  7.             XmlDocument xmlDoc = new XmlDocument();
  8.             xmlDoc.Load("cauhinh.xml");
  9.  
  10.             xmlDoc.DocumentElement["Height"].InnerText = this.Height.ToString();
  11.             xmlDoc.DocumentElement["Width"].InnerText = this.Width.ToString();
  12.             xmlDoc.DocumentElement["Top"].InnerText = this.Top.ToString();
  13.             xmlDoc.DocumentElement["Left"].InnerText = this.Left.ToString();
  14.             xmlDoc.Save("cauhinh.xml");
  15.         }
  16.  


Bây giờ, bạn thử nhấn F5 để Run chương trình đi nào, sau đó thay đổi kích thước của Form và đóng Form rồi lại mở ra nữa. Bạn sẽ nhận được điều mình cần.
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

hackerteen
Bài viết: 3
Ngày tham gia: T.Tư 02/07/2008 2:20 pm

Re: XML trong .NET

Gửi bàigửi bởi hackerteen » T.Tư 02/07/2008 2:39 pm

Thank you very nhìu ! Mình mới chuyển từ VB sang VB.NET nên có gì mong các pác chỉ giáo ! :D :D :D :D
Thất bại là ........................ bà ngoại thành công !

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: XML trong .NET

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 14/07/2008 1:06 pm

Anh ơi, vậy khi tạo file xml thì ta tạo như thế nào?

tienlbhoc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 415
Ngày tham gia: T.Bảy 14/07/2007 10:06 pm
Đến từ: Hà Nội
Been thanked: 1 time

Re: XML trong .NET

Gửi bàigửi bởi tienlbhoc » T.Hai 14/07/2008 1:23 pm

;)) , bác minh danh giỏi ghê , đây là tut vb.net hay c# vậy ;))
Diễn đàn và blog phần mềm tự làm :
http://my.opera.com/DienDanTienlbhoc/forums/
http://my.opera.com/tienlbhoc/blog/

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: XML trong .NET

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 14/07/2008 1:41 pm

tienlbhoc đã viết:;)) , bác minh danh giỏi ghê , đây là tut vb.net hay c# vậy ;))

1/ minh danh là ai vậy?
2/ Half VB, Nửa C# :D

Hình đại diện của người dùng
onlysoft
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 330
Ngày tham gia: T.Tư 26/03/2008 6:32 pm
Đến từ: ONLYSOFT
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi onlysoft » CN 28/09/2008 7:38 am

<?xml version="1.0"?>
<mds version="1.0">
<assembly>
</assembly>
<contents>
<folder title="New Folder" />
<folder title="New Folder 1" /> <folder title="New Folder 2" />
</contents>
</mds>

Giúp Only với, Only có đoạn XML như trên, bây giờ làm sao để selectsinglenode() cái node mà Only tô đậm đấy, và viết lệnh thêm một node con vào node đó ?
:x Tin học là cuộc sống, Lập trình là người yêu, Vợ là computer :x
Tôi yêu tin học, Tin học lập trình, Để lập trình tôi dùng VB, Tôi là B-)nly

anhcaucoi
Bài viết: 2
Ngày tham gia: CN 02/11/2008 1:24 am

Re: XML trong .NET

Gửi bàigửi bởi anhcaucoi » CN 02/11/2008 1:30 am

Mã: Chọn hết

  1. <?xml version="1.0"?>
  2. <mds version="1.0">
  3. <assembly>
  4. </assembly>
  5. <contents>
  6. <folder title="New Folder" />
  7. <folder title="New Folder 1">
  8. <childnode title="Toi la node con cua Folder1"/>
  9. </folder>
  10.  <folder title="New Folder 2" />
  11. </contents>
  12. </mds>

anhcaucoi
Bài viết: 2
Ngày tham gia: CN 02/11/2008 1:24 am

Re: XML trong .NET

Gửi bàigửi bởi anhcaucoi » CN 02/11/2008 9:48 pm

Xin lỗi nhé ! Mình đọc nhầm câu hỏi :D

Mình không quen dùng selectSingerNode nên không demo cái đấy.
Để giải quyết được vấn đề của bạn thì mình hay dùng vòng lặp for .

Mã: Chọn hết

  1. XmlDocument doc = new XmlDocument();
  2.             doc.Load("ab.xml");
  3.             XmlNode root = doc.DocumentElement;
  4.             XmlNode canlay = root.ChildNodes[1];
  5.             for (int i = 0; i < canlay.ChildNodes.Count; i++)
  6.             {
  7.                 XmlNode foldercanlay=canlay.ChildNodes[i];
  8.                 if (foldercanlay.Attributes[0].Value == "New Folder 1")
  9.                 {                  
  10.                     XmlElement addthem = doc.CreateElement("Foldercon");
  11.                     addthem.SetAttribute("tenatt", "giatri");
  12.                     addthem.InnerText=("Cai nay Dung vong lap for");
  13.                     foldercanlay.AppendChild(addthem);
  14.                     doc.Save("ab.xml");
  15.                  }
  16.              }
  17.  
Tập tin đính kèm
WindowsFormsApplication1.rar
dung C# Them 1 Node vao vi tri chi dinh Trong XML
(38.29 KiB) Đã tải 612 lần

bigboy83
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 66
Ngày tham gia: T.Năm 26/03/2009 8:26 am

Re: XML trong .NET

Gửi bàigửi bởi bigboy83 » T.Ba 04/08/2009 8:34 pm

xin cho mình hỏi thăm trong phần nút Add có đoạn là

'riêng đối với đoạn văn bản nằm trong tag CData, ta phải làm cách khác với cách XmlText

cho mình hỏi cái CData đó có khác gì với cái XmlText không minh không hiểu chỗ này, rất mong bạn chỉ giúp

cảm ơn bạn nhiều lắm chúc bạn sức khỏe

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: XML trong .NET

Gửi bàigửi bởi anhtuyenbk » T.Tư 05/08/2009 5:13 pm

- CDATA là elment đặc biẹt cho phép bạn chứa bất kỳ ký tự nào trong đó kể cả <>&..., nó chủ yếu dùng cho việc cung cấp thông tin cho cái element bao gộp nó.
- Nhưng cái cách mà neverland87 dùng để update nọi dung cho CDATA quá dài dòng, thực tế hoàn toan có thể dụng thuộc tính InnerText để gán nội dung mới như các element khác.
To neverland87
Nhờ bạn di chuyển cái file xml dùng để minh họa cho bài tut này lên cái thread đầu tiên, vì mình thấy nhiều bạn ko chịu để ý, sử dụng file xml lung tung để thực hành bài tut này.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang

neverland87
Guru
Guru
Bài viết: 490
Ngày tham gia: T.Bảy 26/05/2007 4:31 pm
Been thanked: 8 time

Re: XML trong .NET

Gửi bàigửi bởi neverland87 » T.Năm 06/08/2009 9:38 pm

anhtuyenbk đã viết:To neverland87
Nhờ bạn di chuyển cái file xml dùng để minh họa cho bài tut này lên cái thread đầu tiên, vì mình thấy nhiều bạn ko chịu để ý, sử dụng file xml lung tung để thực hành bài tut này.

Cám ơn anhtuyenbk đã nhắc nhở, mình đã upload tập tin employees.xml để cho các bạn dễ thực hành. :)
SIMPLY THE BEST - ĐƠN GIẢN LÀ TỐT NHẤT

bigboy83
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 66
Ngày tham gia: T.Năm 26/03/2009 8:26 am

Re: XML trong .NET

Gửi bàigửi bởi bigboy83 » T.Năm 06/08/2009 10:28 pm

cảm ơn anhtuyenbk đã giúp đở cho mình hỏi thăm thêm là nếu muốn xóa 1 phần tử cấp con ví dụ như Firstname thì mình gán lại như sau nhưng mà lại ko chay đựoc , trình ko báo lỗi gì nhưng mà vẫn ko xóa đựoc, mong bạn chỉ giúp cho mình, rất cảm ơn và chúc sức khỏe


Mã: Chọn hết

  1.  
  2.  Dim node As XmlNode = doc.SelectSingleNode("employees/employee/firstname[firstname = Janet]")
  3.  


------------------
Khi đã load lên treeview rồi

NodeCha(0) / cap1a / cap2a.....
NodeCha(1) / cap1b / cap2b.....

minh muốn nhấp vào bất cứ cấp con nào trên treeview thì nó vẫn phải hiểu là đang ở NodeCha nào
vd: Minh đang chọn ở cái

Cap1a hoặc cap2a .... thì nó vẫn phải hiểu là đang vẫn ở NodeCha(0)

vi mình thử các thuộc tính như Level và index nhưng vẫn ko tìm ra cách

thật ra mình muốn lấy vị trí index của Cấp cha để gán vào bien chimuc để fill lên các texbox trong

Mã: Chọn hết

  1. Public Sub FillControls()
  2.         'node = nút con thứ <chimuc> của nút gốc của tài liệu
  3.         Dim node As XmlNode = doc.DocumentElement.ChildNodes(chimuc)
  4.         'combobox mã số nhân viên = giá trị của attribute employeeid của nút con vừa tìm
  5.         txt_Ten_Thuvien.Text = node.Attributes("Ten_Thuvien").Value
  6.         'gán chuỗi nằm giữa cặp tag đóng-mở cho các textbox thông tin
  7.         txt_Ten_Sach.Text = node.ChildNodes(0).Attributes("Ten_Sach").Value
  8.         'txt_Ten_ChiMuc.Text = node.ChildNodes(0).InnerText
  9.     End Sub


và mình đã tìm các bài trên mạng nhưng mà ko làm đựoc nên lại hỏi và hỏi có gì các bạn thông cảm :) rất cảm ơn

các bạn vui vẻ , thành công

Hình đại diện của người dùng
anhtuyenbk
Guru
Guru
Bài viết: 1311
Ngày tham gia: T.Năm 22/09/2005 4:12 pm
Đến từ: Một nơi chừa từng biết, chưa từng nghe, chưa từng thấy
Been thanked: 38 time

Re: XML trong .NET

Gửi bàigửi bởi anhtuyenbk » T.Sáu 07/08/2009 8:32 am

@bigboy83
- Cái path của bạn sai nên nó ko chỉ ra được cái node firstname trong xml. Bạn nên tập sử dụng tính năng Debug trong VS sẽ thấy nó trả về null tại biến node.

Mã: Chọn hết

  1. employees/employee/firstname[text()='Janet']

- Còn đối với Treeview thì mỗi TreeNode đều có thuộc tính Name, khi bạn add các Treenode vào treeview, hãy gán path của cái NodeCha vào các node con, cháu chắt của nó (cap1a / cap2a.....), khi cần thì lấy thuộc tính Name ra để xác định Cha của nó.
Kiếm cơm cho qua ngày tháng
https://www.facebook.com/pinduphongpisenchinhhang


Quay về “[.NET] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách