Phân tích nội dung và kiểu dữ liệu của nút

Một phần của tài liệu Tài liệu giảng dạy môn chuyên đề công nghệ XML và ứng dụng (Trang 87 - 104)

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

+ “&nbsp; = “ + theNode.nodeValue + “&nbsp; (Node type:” + typeData + “) <BR>”

} else {

text = indentSpacing + theNode.nodeName

+ “&nbsp; (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 + “&nbsp; &nbsp; &nbsp; &nbsp;”) } } 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/

Một phần của tài liệu Tài liệu giảng dạy môn chuyên đề công nghệ XML và ứng dụng (Trang 87 - 104)