Chúng ta đã tìm hiểu qua cấu trúc cây tài liệu DOM có tất cả 12 kiểu nút. Đối với mỗi nút, chúng ta có thể dựa vào giá trị nodeType để xác định kiểu dữ liệu của nút. Các giá trị nodeType là:
Giá trị Kiểu nút Mô tả
1 2 3 4 5 6 7 8 9 10 11 12 Element Attribute Text CDATA section Entity reference Entity Processing Instruction Comment Document Document Type Document fragment Notation Phần tử XML Thuộc tính Dữ liệu Text
Phân đoạn CDATA Tham chiếu thực thể Thực thể
Chỉ thị xử lý Chú thích Tài liệu Kiểu tài liệu Đoạn tài liệu Ghi chú
Sau đây chúng ta sử dụng giá trị nodeType để xác định kiểu dữ liệu của nút đồng thời sử dụng thuộc tính nodeValue để trích rút nội dung dữ liệu mà nút đang nắm giữ.
Ví dụ : <HTML> <HEAD> <TITLE> Prasing an XML Document </TITLE> <XML ID = “meetingsXML” SRC = “meetings.xml”> </XML> <SCRIPT LANGUAGE = “JavaScript”>
Function parseDocument () {
resultsDIV.innerHTML = interateChildren (documentXML,” “) }
Function interateChildren (theNode, indentSpacing) { var typeData switch (theNode.NodeType) { case1: typeData = “element” break case2:
typeData = “attribute”
break case3:
typeData = “text”
break case4:
typeData = “CDATA section”
break case5:
typeData = “entity reference”
break case6:
typeData = “entity”
break case7:
typeData = “processing instruction”
break case8: typeData = “comment” break case9: typeData = “document” break case10:
typeData = “document type”
break case11:
typeData = “document fragment”
case12:
typeData = “notation”
}
var text
//Nếu nút có dữ liệu thì in nội dung của nút ra trình duyệt
if (theNode.nodeValue!=null){
text = indentSpacing + theNode.nodeName
+ “ = “ + theNode.nodeValue + “ (Node type:” + typeData + “) <BR>”
} else {
text = indentSpacing + theNode.nodeName
+ “ (Node type:” + typeData
+ “) <BR>”
}
// Trích rút dữ liệu của thuộc tính
if (theNode.attributes! = null){ if (theNode.attributes.length > 0) {
for (var loopIdex = 0; loopIdex < theNode.attribute.length; loopIndex++) { text +=”(Attribute:”+ theNode.attributes(loopIndex).nodeName + “=\ “” + theNode.attributes(loopIndex).nodeValue + “=\ “” + } } }
// Đệ quy tìm sâu xuống các nút con
if (theNode.childNodes.lenght > 0) {
for (var loopIndex = 0; loopIndex < theNode.childNodes.length; loopIndex ++){
text +=interateChildren (
theNode.childNodes(loopIndex), indentSpacing + “ ”) } } return text } </SCRIPT> </HEAD>
<BODY> <CENTER>
<H1> Parsing an XML Document and displaying node type and content
</H1> </CENTER> <CENTER>
<INPUT TYPE = “BUTTON”
VALUE = “Parse and display the document” ONCLICK = “parseDocument()”>
<CENTER>
<DIV ID = “resultDIV”></DIV>
</BODY> </HTML>
Kết quả toàn bộ nội dung của dữ liệu đầu vào từ tập tin meetings.xml được hiển thị đầy đủ thông tin bao gồm kiểu nút, nội dung phần tử, nội dung thuộc tính.
Kết chương
Qua chương này, chúng ta đã biết cách dùng JavaScript để xử lý dữ liệu XML theo mô hình DOM. Mặc dù DOM xử lý và truy xuất được mọi dữ liệu trong tài liệu XML, nhưng mô hình khá phức tạp vì phải lần theo các nút trong cây tài liệu. Ngoài ra, chúng ta còn có thể kiểm tra tính hợp lệ của tài liệu XML bằng JavaScript với mô hình tài liệu DOM và thay đổi nội dung XML bằng JavaScript.
Câu hỏi củng cố:
1. Mô hình DOM là gì?
2. Dùng lớp đối tượng Microsoft.XMLDOM xây dựng tài liệu XML như thế nào? 3. Hãy cho biết các phần tử dùng nạp dữ liệu <XML>?
BÀI TẬP THỰC HÀNH Bài 1: Tạo tập tinthuchanh.HTML hiển thị nội dung sau:
Bài 2: Cho giao diện sau:
- Tạo trang greating.xml và tạo tiếp trang greating.css để hiển thị nội dung trên (dòng đầu tiên: màu đỏ; dòng kế tiếp: màu xanh và canh lề trái; nền màu vàng)
Bài 3. Viết trang XML lưu trữ thông tin của cá nhân, dùng CSS để hiển thị thông tin sau theo yêu cầu: (02 dòng đầu tiên: màu đỏ; 02 dòng kế tiếp: màu vàng và canh lề trái; nền màu xanh dương đậm)
Bài 4: Viết trang XML lưu trữ thông tin các thành viên của lớp (tối thiểu 10 người) gồm các thông tin sau:
Họ tên, Năm sinh, Quê quán, Phái, Đơn vị công tác, Số ĐT Dùng CSS để hiển thị thông tin
Bài 5: Kết hợp khai báo không gian tên và ứng dụng Math tạo giao diện sau:
Bài 6: Ứng dụng phân đoạn CDATA đưa vào nội dung đoạn JavaScript để được giao
Bài 7. Thực hiện theo yêu cầu sau:
Tạo tập tinperson.xml để lưu trữ nội dung Tạo các ràng buộc bằng tập tin person.xsd
Tạo tập tin person.xsl để hiển thị nội dung như giao diện sau:
Bài 8.
1. Tạo tập tin Library.xml có nội dung sau: <?xml version='1.0'?>
<?xml:stylesheet type="text/xsl" href="Library.xsl"?>
<library xmlns="x-schema:LibrarySchema.xml"> <name>Nhà sách Minh Khai</name>
<book hardback="yes">
<title>C++ Programming for Beginners</title> <author>
<first-name>Nguyễn Phương</first-name> <last-name>Lan</last-name> </author> <callno>0912.123.456</callno> <online_url>http://vovisoftLibrary/online_books/005682C3.html</ online_url> </book>
<journal series="XML Users Journal">
<date>1999-08-6</date> <callno>0988.188.188</callno> </journal> <video> <title>Titanic</title> <director> <name>James Cameron</name> </director> <callno>0939.339.339</callno> </video> <book>
<title>The C Programming Language</title> <author>
<first-name>Đoàn Văn</first-name> <last-name>Ban</last-name>
</author> <author>
<first-name>Đỗ Trung</first-name> <last-name>Tuấn</last-name>
</author> <callno>0944.321.321</callno> <online_url>http://VoviosoftLibrary/online_books/005724C2.html</onli ne_url> </book> </library>
Bài 10.
- Tạo tập tin sinhvien.xml lưu trữ thông tin sinh viên gồm: Mã số, họ tên, lớp, điểm - Tạo tập tin sinhvien.xsl để hiển thị như giao diện sau:
Bài 11.
Cho giao diện sau:
- Tạo tập tincatalog.xml lưu trữ thông tin - Tạo tập tincatalog.xsl để hiển thị
Bài 12.
XML, DTD và XSL
Sử dụng dữ liệu sau để tạo một tập tin DTD có tên là BookCatalogue.dtd và một trang XML có tên là BookCatalogue.xml. Sau đó tạo tập tin XSL có tên BookCatalogue.xsl để hiển thị nội dung của tập tin BookCatalogue.xml
- Bảng dữ liệu
Book Catalogue
Title Publisher Author
My Life and Times McMillin Publishing Paul McCartney Illusions The Adventures of a Reluctant
Messiah
Dell Publishing Co Richard Bach
The First and Last Freedom Harper & Row J. Krishnamurti
Happy life Dell Publishing Co J.Mathew
XML, XSD và CSS
Sử dụng dữ liệu như ở câu 1 để tạo một tập tin XSD có tên là BookCatalogue.xsd và tập tin BookCatalogue.xml. Sau đó tạo tập tin BookCatalogue.css để hiển thị nội dung tập tin BookCatalogue.xml
My Life and Times
Paul McCartney 1998
94303-12021-43892 McMillin Publishing
Illusions The Adventures of a Reluctant Messiah
Richard Bach 1977
0-440-34319-4 Dell Publishing Co
The First and Last Freedom
1954
0-06-064831-7 Harper & Row
Happy life J.Mathew 2000 0-06-064831-8 Dell Publishing Co Bài 13.
Tìm DTD cho tài liệu sau: <?xml version="1.0"?> <customer> <name> <first>John</first> <middle>Smithy</middle> <last>Doe</last> </name> <contact> <address>
<street>123 Some Street</street> <city>Anytown</city> <state>NC</state> <zip>25555</zip> </address> <phone> <home>8934527</home?> <work>9865376</work> <mobile>984538763</mobile> </phone> </contact> </customer> Định nghĩa các phần tử có lặp lại <?xml version="1.0"?>
<NgayDat>27-2-2003</NgayDat>
<KhachHang>Tran Thanh Nhan</KhachHang> <SanPham> <MaSo>5</MaSo> <SoLuong>7</SoLuong> </SanPham> <SanPham> <MaSo>1</MaSo> <SoLuong>9</SoLuong> </SanPham> </DatHang>
Bài 14. Từ hai bài trên dùng DTD chuyển qua dùng Schema
Bài 15. Tìm DTD cho tài liệu sau <?xml version="1.0"?> <email> <to>LeQuangTam@yahoo.com</to> <from>TranQuocTuan@gmail.com</from> <cc>LeMyTien@yahoo.com</cc> <bcc></bcc> <subject>Tin vui</subject>
<body>Me va Ba oi! Con co tin vui ne!....</body> </email>
Bài 16. Tìm DTD cho tài liệu sau <?xml version="1.0"?> <CD>
<artist>Kim Hee Sun</artist> <title>The Myth</title> <gene>Love</gene> <date-released>2005</date-released> <song> <title>Endless love</title> <length> <minutes>12</minutes> <seconds>48</seconds> </length> <parody>
<title>Lovely</title>
<artist>Thanh Long</artist> </parody>
</song> <song>
<title>Tonight I celebrate my love for you</title> <length> <minutes>3</minutes> <seconds>28</seconds> </length> <parody/> </song> </CD>
Bài 17. Từ hai bài trên dùng DTD chuyển qua dùng Schema
Bài 18. Tìm DTD cho tài liệu sau: <?xml version="1.0"?> <CacNhanVien> <NhanVien maso="111"> <ho>Tran</ho> <ten>Le</ten> <chucdanh>Giam Doc</chucdanh> <ngaybatdau>1-2-2003</ngaybatdau> <luong>7000000</luong> <bophan>Quan Tri</bophan> <hinhanh>images/tranle_111.jpg</hinhanh> </NhanVien> <NhanVien maso="112"> <ho>Ly</ho> <ten>Thanh Thanh</ten> <chucdanh>Thu ky</chucdanh> <ngaybatdau>15-8-2004</ngaybatdau> <luong>2300000</luong> <bophan>Quan Tri</bophan> <hinhanh>images/LyThanh_112.jpg</hinhanh> </NhanVien> <NhanVien maso="113"> <ho>Cao</ho>
<ten>Anh Tuan</ten>
<chucdanh>Chuyen vien tai chinh</chucdanh> <ngaybatdau>23-7-2004</ngaybatdau> <luong>3000000</luong> <bophan>Tai chinh</bophan> <hinhanh>images/CaoAnh_113.jpg</hinhanh> </NhanVien> <NhanVien maso="114"> <ho>Nguyen</ho> <ten>Cao Minh</ten>
<chucdanh>Lap trinh vien</chucdanh> <ngaybatdau>5-2-2006</ngaybatdau> <luong>4000000</luong>
<bophan>Cong nghe thong tin</bophan> <hinhanh>images/CaoMinh_114.jpg</hinhanh> </NhanVien>
<NhanVien maso="115"> <ho>Kim</ho>
<ten>Thanh Thao</ten>
<chucdanh>Pho giam doc</chucdanh> <ngaybatdau>23-7-2005</ngaybatdau> <luong>5000000</luong> <bophan>Thu cuoc</bophan> <hinhanh>images/ThanhThao_115.jpg</hinhanh> </NhanVien> </CacNhanVien>
Bài 19. Định nghĩa các thuộc tính <?xml version="1.0"?> <KhachHang> <ho>Nguyen</ho> <tenlot></tenlot> <ten>Anh</ten> <SoDienThoai vitri="Nha">9845345</SoDienThoai> <SoDienThoai vitri="CoQuan">994545345</SoDienThoai> </KhachHang>
Bài 21. Xây dựng một Project trong VS2005 với Ngôn ngữ lập trình C#.
Tạo một form có khuôn dạng như hình minh họa ở dưới, trong đó 3 nút lệnh và một đối tượng webBrowser.
- Nút AccesstoXML: thực hiện hàm chuyển đổi dữ liệu từ CSDL Access sang tư liệu XML
- Nút XMLtoHTML: thực hiện hàm để sử dụng tệp XSL để transform tệp XML sang tệp HTML
- Nút ResultInBrowser: hiển thị tư liệu HTML vừa chuyển đổi trong trình duyệt
Hướng dẫn:
1. Thiết lập các References như sau :
2. Các nguồn tư liệu: (tất cả các nguồn tư liệu lưu trong thư mục BIN/DEBUG của ứng dụng)
Tệp VD.MDB có table : VD(Ma char(5), HoTen char(30), DiaChi char(30))
.NET sẽ chuyển đổi table VD thành tệp VD.XML có dạng : <NewDataSet>
<Table>
<Ma> 001 </Ma>
<HoTen> Ngô Đình Thưởng </HoTen> <DiaChi> Đà Nẵng </DiaChi>
</Table>
<! - - Table khác --> </NewDataSet>
Do vậy, tệp VD.XSL sẽ như sau : <?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<html>
<style>
body{margin: 8 8 8 20}
table{border-collapse:collapse; border:solid 1px blue; width:400px}
td{border: solid 1px silver; padding: 1 1 1 4} </style>
<body>
<H4 style="color:green">DANH SÁCH GIÁO VIÊN</H4> <table> <tr bgColor="#9acd32"> <td>Mã số</td> <td>Họ tên</td> <td>Quê quán</td> </tr> <xsl:for-each select="//Table"> <tr> <td><span><xsl:value-of select="Ma"/></span></td> <td><span><xsl:value-of select="HoTen"/></span></td> <td><span><xsl:value-of select="DiaChi"/></span></td> </tr> </xsl:for-each> </table>
<h4>Trang web này được transform từ hai tệp XML và tệp XSL</h4> </body>
</html>
</xsl:template> </xsl:stylesheet>
3. Mã nguồn viết bằng C#
private void AccessToXml_Click(object sender, EventArgs e) {
thongbao.Text = "Xin chờ giây lát"; string strSQL = "Select * from VD";
string strConn = "Provider=Microsoft.Jet.Oledb.4.0; Data Source= VD.mdb";
OleDbDataAdapter dad = new OleDbDataAdapter(strSQL, strConn); DataSet dst = new DataSet();
dad.Fill(dst);
XmlDataDocument doc = new XmlDataDocument(dst); doc.Save("VD.XML");
thongbao.Text = "Đã chuyển đổi từ CSDL sang XML thành công"; // thongbao là một đối tượng Label
}
private void XmlToHtml_Click(object sender, EventArgs e) {
thongbao.Text = "Xin chờ giây lát"; string tep = "VD.HTM";
XslTransform xslt = new XslTransform(); xslt.Load(@"VD.XSL");
XPathDocument mydata = new XPathDocument(@"VD.XML");
XmlTextWriter writer = new XmlTextWriter(tep,Encoding.UTF8); xslt.Transform(mydata, null, writer);
thongbao.Text = "Đã transform XML+XSL sang HTML thành công"; }
private void ResultInBrowser_Click(object sender, EventArgs e) { thongbao.Text = webBrowser1.Url.ToString(); webBrowser1.Navigate("D:/BaiTapXML/DataBaseToXML/DataBaseToXML/bin/D ebug/vd.htm", "_blank"); // Cú pháp: webBrowser1.Navigate(URL,Target) }
TÀI LIỆU THAM KHẢO Tài liệu tham khảo biên soạn:
[1]. Nguyễn Phương Lan, “XML nền tảng & ứng dụng”, NXB Lao Động - Xã Hội, NXB 2003. [2]. Trung tâm công nghệ phần mềm Thừa Thiên Huế“Căn bản về XML”, NXB 2005. [3] Nguyễn Thiên Bằng, “Giáo trình nhập môn XML”, NXB Lao Động - Xã Hội, NXB 2003 [4] Cát Văn Thành, “XML-Kỹ thuật tạo trang web”, NXB Thống Kê, NXB 2006. [5] Phạm Hữu Khang, C#2005 Tập 5, Lập trình ASP.net – Quyển 4: Đối tượng ADO.net 2.0 và XML, NXB Lao Động - Xã Hội, NXB 2005.
[6] Brell MeLaughin, “Java and XML”, Copyright © 2000 O'Reilly & Associates Inc. All rights reserved.
[7] Doug Tidwell, “XML programming in Java”, Cyber Evangelist, developerWorks XML Team, September 1999.
[8] Akmal B. Chaudhri, Awais Rashid, Roberto Zicari, “XML Data Management, Native XML and XML-Enabled Database Systems”, U.S. Corporate and Government Sales, 2003.
Tài liệu đề nghị cho học viên:
[1] Nguyễn Phương Lan, “XML nền tảng & ứng dụng”, NXB Lao Động – Xã Hội, NXB 2003. [2] Nguyễn Thiên Bằng, “Giáo trình nhập môn XML”, NXB Lao Động - Xã Hội, NXB 2003.
Website:
[1] http://www.w3schools.com/ [2] http://www.w3.org/XML/