Tải bản đầy đủ (.pdf) (8 trang)

Thao tác XML - Sử dụng DOM trong .NET – Phần 1 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (105.52 KB, 8 trang )

Thao tác XML
Sử dụng DOM trong .NET – Phần 1

Document Object Model (DOM) thực thi trong .NET hỗ trợ các kĩ thuật
W3C DOM Level 1 và Core DOM Level 2. DOM được thực thi thông qua
lớp XmlNode, một lớp ảo mô tả một nút của tài liệu.
Ngoài ra còn có một lớp XmlNodeList là một danh sách có thứ tự các nút.
Đây là một danh sách sống, và bất kì thay đổi nào cũng sẽ cập nhật ngay vào
danh sách. XmlNodeList hỗ trợ truy cập chỉ mục và truy cập lặp. Còn có
một lớp ảo khác, XmlCharacterData, nó là lớp mở rộng của
XmlLinkedNode, và cung cấp các phương thức sử dụng văn bản cho các lớp
khác.
Các lớp XmlNode và XmlNodeList trang điểm cho thực thi DOM trong
.NET Framework. Đây là một danh sách các lớp cơ sở trong XmlNode:
Class Name Description
XmlLinkedNode Trả về nút trước và sau nút hiện tại. Thêm
các
thuộc tính NextSibling và PreviousSibling và
o
XmlNode.
XmlDocument Miêu tả toàn bộ tài li
ệu. Thực thi các đặc điểm kĩ
thuật DOM Level 1 và Level 2.
XmlDocumentFragment

Miêu tả mô hình cây thư mục của tài liệu.
XmlAttribute Một đối tượng thuộc tính của một đối tư
ợng
XmlElement.
XmlEntity Phân tách và tổ hợp các nút.
XmlNotation Chứa cách chú thích trong môt DTD hoặc sơ đồ.


Các lớp sau mở rộng XmlCharacterData:
Class Name Description
XmlCDataSection Một đối tượng mô tả một đoạn CData
section
của một tài liệu.
XmlComment Mô tả một đối tượng ghi chú XML.
XmlSignificantWhitespace

Mô t
ả một nút với khoảng trắng. Các nút chỉ
được tạo khi cờ PreserveWhiteSpace là true.
XmlWhitespace Miêu tả whitespace trong một thành ph
ần ghi
chú. Các nút đư
ợc tạo chỉ khi cờ
PreserveWhiteSpace là true.
XmlText Ghi chú dạng văn bản cảu một thành ph
ần hoặc
thuộc tính.
Cuối cùng, tập các lớp tiếp theo mở rộng lớp XmlLinkedNode:
Class Name Description
XmlDeclaration Miêu tả nút khai báo (<?xml version='1.0' >)
XmlDocumentType Quan hệ dữ liệu với khai báo kiểu tài liệu
XmlElement Một đối tượng thành phần XML
XmlEntityReferenceNode

Mô tả một nút tham chiếu tồn tại
XmlProcessingInstruction

Chứa một cấu trúc xử lí XML

Như bạn thấy, .NET tạo sẽ một lớp phù hợp với bất kì kiểu XML nào mà bạn bắt gặp.
Bởi vậy, bạn sẵn có một bộ các công cụ mạnh mẽ và mềm dẻo. Chúng ta sẽ không đi vào
chi tiết các lớp, nhưng chúng ta sẽ dùng một số ví dụ. Sau đây là sơ đồ các lớp:
Sử dụng lớp XmlDocument
XmlDocument và lớp xuất phát XmlDataDocument (chúng ta sẽ xem xét sau
trong chương) là các lớp bạn sẽ dùng để miêu tả DOM trong .NET. Không
giống như XmlReader và XmlWriter, XmlDocument cho cung cấp cho bạn
khả năng đọc và viết như truy xuất ngẫu nhiên cây DOM . XmlDocument
tương tự như thực thi DOM trong MSXML. Nếu bạn đã từng lập trình với
MSXML bạn sẽ cảm thấy tiện lợi khi dùng XmlDocument.
Lấy một ví dụ về tạo một đối tượng XmlDocument, load một tài liệu từ đĩa,
và load các tiêu đề vào một listbox. Nó giống như mọt ví dự mà chúng ta đã
tạo trong phần XmlReader. Cái khác ở đây là chúng ta sẽ chọn các nút mà
chúng ta sẽ làm việc thay vì duyệt qua các nút trong tài liệu như đã từng làm.
Đây là mã. Hãy xem cách làm việc của nó và so sánh với ví dụ XmlReader
(file có thể tìm thấy trong thư mục DOMSample1):
private void button1_Click(object sender, System.EventArgs e)
{
// doc is declared at the module level
// change path to match your path structure
doc.Load(" \\ \\ \\books.xml");
// get only the nodes that we want
XmlNodeList nodeLst=doc.GetElementsByTagName("title");
// iterate through the XmlNodeList
foreach(XmlNode node in nodeLst) listBox1.Items.Add(node.InnerText);
}
Chú ý rằng chúng ta cũng có thể thêm khai báo sau vào mô module này:
private XmlDocument doc=new XmlDocument();
Nếu chúng ta chỉ muốn làm như vậy thì dùng XmlReader sẽ tốt hơn vì chỉ
cần duyệt qua tài liệu một lần duy nhất để load dữ liệu cho the listbox.

XmlReader được thiết kế cho mục đích này. Nếu bạn muốn tham chiếu lại
một nút, thì dùng XmlDocument là cách tốt nhất. Mở rộng ví dụ trên bằng
cách thêm một quản lí sự kiện khác (đây là DOMSample2):
private void listBox1_SelectedIndexChanged(object sender,
System.EventArgs e)
{
//create XPath search string
string srch="bookstore/book[title='" + listBox1.SelectedItem.ToString()
+ "']";
//look for the extra data
XmlNode foundNode = doc.SelectSingleNode(srch);
if(foundNode != null)
MessageBox.Show(foundNode.InnerText);
else
MessageBox.Show("Not found");
}
Trong ví dụ này, chúng ta load các tựa trong tài liệu books.xml vào listbox,
giống như trong ví dụ trên. Khi chúng ta click vào listbox, khi đó sự kiện
SelectedIndexChanged() được phát ra. Trong trường hợp này, chúng ta tạo
mọt văn bản của đối tượng được tạo trong listbox (tựa của sách) tạo một
XPath statement và truyền nó cho phương phương thức SelectSingleNode()
của đối tượng doc. Nó trả về sách có tựa được tìm thấy. Sau đó chúng ta
biểu diễn InnerText của nút trong một message box. Chúng ta có thể giữ
clicking trên mục chọn trong listbox, tài liệu đã được load lên sẽ không thay
đổi cho đến khi chúng ta thả tay ra.
Một ghi chú nhanh có liên quan đến phương thức SelectSingleNode(). Đó là
thực thi XPath trong lớp XmlDocument. Có hai phương thức
SelectSingleNode() và SelectNodes(). Cả hai phương thức này đều được
định nghĩa trong XmlNode, là lớp xuất phát của XmlDocument.
SelectSingleNode() trả về một XmlNode và SelectNodes() trả về một

XmlNodeList. Tất nhiên, không gian System.Xml.XPath chứa một thực thi
XPath mạnh, và sẽ xem xét trong chương sau.

×