Sử dụng MSXML trong .NET Sẽ ra sao nếu bạn có một tấn mã đã được phát triển bằng những phiên bản cổ xưa nhất của Microsoft (Hiện tại là MSXML 4.0)? Bạn có phải bỏ đi tất cả khi chuyển qua dùng .NET? Trong khi đó có gì tốt hơn khi sử dụng MSXML 4.0 DOM? Có nên chuyển sang .NET ngay lập tức? Câu trả lời là không. XML 4.0, 3.0 hoặc 2.0 có thể dùng trực tiếp trong các ứng dụng của bạn. Trước tiên bạn thêm mộ t tham chiếu đến msxml4. DLL trong giải pháp của bạn, bạn có thể bắt đầu viết một vài mã. Một vài ví dụ tiếp theo sẽ dùng books.xml như là nguồn dữ liệu. File này có thể download từ web site Wrox (http://www.wrox.com/ ), nó cũng bao gồm các ví dụ khác trong .NET SDK. File books.xml là một thư viện sách ảo. Nó bao gồm thông tin về sách như thể loại, tên tác giả, giá và số ISBN. Tất cả mã ví dụ trong chương này đều sẵn có trong web site Wrox. Trong thứ tự thực thi các ví dụ, các file dữ liệu XML sẽ cần phải nằm trong cây thư mục như sau: /XMLChapter/Sample1 /XMLChapter/Sample2 /XMLChapter/Sample3 . Thật vậy, bạn có thẻ gọi trực tiếp bất kì thứ gì bạn muốn, nhưng vị trí tương đối đóng mộ t vai trò quan trọng. Bạn cũng có thể sửa đổi các ví dụ ở bất kì điểm nào bạn muốn. Mã ví dụ sẽ được giải thích để chỉ những dòng nào thay đổi nếu bạn muốn như vậy. File books.xml trong như thế này: <?xml version='1.0'?> <!-- This file represents a fragment of a book store inventory database --> <bookstore> <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0"> <title>The Autobiography of Benjamin Franklin</title> <author> <first-name>Benjamin</first-name> <last-name>Franklin</last-name> </author> <price>8.99</price> </book> <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2"> <title>The Confidence Man</title> <author> <first-name>Herman</first-name> <last-name>Melville</last-name> </author> <price>11.99</price> </book> <book genre="philosophy" publicationdate="1991" ISBN="1-861001-57-6"> <title>The Gorgias</title> <author> <name>Plato</name> </author> <price>9.99</price> </book> </bookstore> Nào hãy xem một vài mã dùng MSXML 4.0 để tải một listbox với các ISBN từ books.xml. Bạn sẽ tìm thấy mã đầy đủ trong thư mục MSXML_Sample . Bạn có thể sao chép nó vào Visual Studio IDE hoặc tạo một Windows Form mới. Form này chứa một listbox và một button, như bạn thấy dưới đây. Cả hai đều dùng tên mặc định listBox1 và button1, với thuộc tính Text của button1 là Load XML. Một điều lưu ý là từ khi MSXML 4 trở thành một thành phần COM-based, chúng ta sẽ cần phải tạo ra interop assembly. Cách dễ nhất là chọn Add Reference từ trình đơn Project trong Visual Studio IDE. Đến tab COM và chọn Microsoft XML, v4.0 (or v3.0, v2.6). Bạn sẽ thấy MSXML2 như một không gian tên được thêm vào Solution Explorer. Tại sao lại là MSXML2? Khi bạn nhập một thành phần COM không gian tên được truyền cho một assembly mới, là tên thư viện kiểu cho thành phần COM đó. Trong trường hợp này nó là MSXML2. Nếu bạn dùng TLBIMP bạn có thể đổi không gian tên thành một cái tên khác mà bạn muốn. Nào bây giờ hày xem các dòng quan trọng từ mã ví dụ MSXML. Chúng ta có một tham chiếu khi thêm dòng: using MSXML2; Chúng ta cũng có một biến cấp lớp. private DOMDocument40 doc; Bây giờ chúng ta đã sẵn sàng để dùng MSXML trong ví dụ của chúng ta. Chúng ta muốn tạo một ISBN từ listbox, và sử dụng một tìm kiếm XPath đơn giản, tìm mục sách nếu tìm thấy thì biếu diễn mục sách dưới dạng text (tựa sách và giá sách) trong một MessageBox. XML Path Language (XPath) là một ghi chú XML được dùng cho truy vấn và lọc văn bản trong một tài liệu XML. Chúng ta sẽ tìm hiểu kĩ cách dùng XPath trong .NET sau. Đây là một mã quản sự kiện cho việc chọn một mẫu từ listbox: protected void listBox1_SelectedIndexChanged ( object sender, System.EventArgs e) { string srch=listBox1.SelectedItem.ToString(); IXMLDOMNode nd=doc.selectSingleNode( "bookstore/book[@ISBN='" + srch + "']"); MessageBox.Show(nd.text); } Giờ đây chúng ta sẽ xem xét sự kiện click của button. Trước tiên, chúng ta load file books.xml - chú ý rằng nếu bạn đang chạy ứng dụng từ thư mục bin/debug hay bin/release, bạn sẽ cần phải điều chỉnh đường dẫn thích hợp. protected void button1_Click (object sender, System.EventArgs e) { doc=new DOMDocument40 (); doc.load(" \\ \\ \\books.xml"); Dòng tiếp theo khai báo một NodeList của các mục sách. Trong trường hợp này có ba mục sách: IXMLDOMNodeList nodes; nodes = doc.selectNodes("bookstore/book"); IXMLDOMNode node=nodes.nextNode(); Sau đó chúng ta lặp qua các mục, và thêm giá trị văn bản của thuộc tính ISBN vào listBox1: while(node!=null) { listBox1.Items.Add(node.attributes.getNamedItem("ISBN").text); node=nodes.nextNode (); } } Hình bên trái là kết quả khi chạy ví dụ. Sau khi click button, listbox tải các book ISBN. Sau khi chọn một mục sách hình bên phải sẽ xuất hiện. . ví dụ, các file dữ liệu XML sẽ cần phải nằm trong cây thư mục như sau: /XMLChapter/Sample1 /XMLChapter/Sample2 /XMLChapter/Sample3 . Thật vậy, bạn có. và chọn Microsoft XML, v4.0 (or v3.0, v2.6). Bạn sẽ thấy MSXML2 như một không gian tên được thêm vào Solution Explorer. Tại sao lại là MSXML2? Khi bạn nhập