Lessons XVII : Chèn thêm nút vào tài liệu XML trong VB.Net

Chèn thêm nút vào tài liệu XML trong VB.Net

Chủ nhật, 24 Tháng 8 2008 06:39 dvpub.com.vn Hướng dẫn lập trình Visual Basic-VB.NET
Email In

Điều chỉnh một tài liệu XML bằng cách chèn vào dữ liệu mới.

Tạo nút bằng một phương thức của XmlDocument (như CreateElement, CreateAttribute, CreateNode…). Kế tiếp, chèn nó vào bằng một phương thức của XmlNode (như InsertAfter, InsertBefore, hay AppendChild).
Chèn một nút vào XmlDocument bao gồm hai bước: tạo nút rồi chèn nó vào vị trí thích hợp. Sau đó, bạn có thể gọi XmlDocument.Save để lưu lại những thay đổi.
Để tạo một nút, bạn sử dụng một trong các phương thức của XmlDocument bắt đầu bằng từ (tiền tố) Create, tùy thuộc vào kiểu của nút. Điều này bảo đảm nút sẽ có cùng không gian tên với phần còn lại của tài liệu. Kế tiếp, bạn phải tìm một nút phù hợp và sử dụng một trong các phương thức chèn của nó để thêm nút mới vào.
Ví dụ dưới đây sử dụng kỹ thuật này để thêm một item mới:

Public Module XmlInsertTest
    Public Sub Main()
        ' Nạp tài liệu.
        Dim Doc As New XmlDocument
        Doc.Load("orders.xml")
        ' Tạo một phần tử mới.
        Dim ItemNode As XmlNode
        ItemNode = Doc.CreateElement("Item")
        ' Thêm đặc tính.
        Dim Attribute As XmlAttribute
        Attribute = Doc.CreateAttribute("id")
        Attribute.Value = "4312"
        ItemNode.Attributes.Append(Attribute
        ' Tạo và thêm các phần tử con cho nút này.
        Dim NameNode, PriceNode As XmlNode
        NameNode = Doc.CreateElement("Name")
        PriceNode = Doc.CreateElement("Price")
        ItemNode.AppendChild(NameNode)
        ItemNode.AppendChild(PriceNode)
        ' Thêm dữ liệu text.
        NameNode.AppendChild(Doc.CreateTextNode("Stapler"))
        PriceNode.AppendChild(Doc.CreateTextNode("12.20"))
        ' Thêm phần tử mới. Trong trường hợp này, chúng ta
        ' cho nó làm con ở cuối danh sách item.
        Doc.DocumentElement.ChildNodes(1).AppendChild(ItemNode)
        ' Lưu tài liệu.
        Doc.Save("orders.xml")
        Console.WriteLine("Changes saved.")
        Console.ReadLine()
    End Sub
End Module
Tài liệu mới trông giống như sau:
<?xml version="1.0"?>
<Order id="2005-04-12-4996">
  <Client id="CMPSO33UL">
    <Name>CompuStation</Name>
  </Client>
  <Item id="2005">
    <Name>Calculator</Name>
    <Price>24.99</Price>
  </Item>
  <Item id="4311">
    <Name>Laser Printer</Name>
    <Price>400.75</Price>
  </Item>
  <Item id="4312">
    <Name>Stapler</Name>
    <Price>12.20</Price>
  </Item>
</Order>

Để đơn giản hóa việc thêm vào những dữ liệu giống nhau, bạn có thể sử dụng phương thức CloneNode, phương thức này sẽ tạo một bản sao của một nút. CloneNode nhận một đối số luận lý. Nếu giá trị này là True, CloneNode sẽ sao lại toàn bộ nhánh, với tất cả các nút lồng bên trong. Và dưới đây là đoạn mã tương đương:

' Nạp tài liệu.
Dim Doc As New XmlDocument
Doc.Load("orders.xml")
' Tạo một phần tử mới dựa trên một item hiện có.
Dim ItemNode As XmlNode
ItemNode = Doc.DocumentElement.ChildNodes(1).LastChild.CloneNode(True)
' Điều chỉnh dữ liệu.
ItemNode.Attributes(0).Value = "4312"
ItemNode.ChildNodes(0).ChildNodes(0).Value = "Stapler"
ItemNode.ChildNodes(1).ChildNodes(0).Value = "12.20"
' Thêm phần tử mới.
Doc.DocumentElement.ChildNodes(1).AppendChild(ItemNode)
' Lưu tài liệu.
Doc.Save("orders.xml")

Chú ý trong trường hợp này, có một số giả định đang được đặt lên các nút hiện có (ví dụ, giả định con đầu tiên của nút item luôn là tên, và con thứ hai luôn là giá). Nếu giả định này không bảo đảm đúng, bạn cần phải xét tên của nút.

Nguồn: dvpub.com.vn

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: