01/10/2018, 22:30

[School] Bài tập về DTC, Schema, DOM trong XML

[School] Bài tập về DTC, Schema, DOM trong XML Tháng Mười Hai 9, 2014 nguyenvanquan7826 Z- Thể loại khác Leave a response Đề bài: Một chương trình quản lý thông tin sinh viên và quá trình mượn tả sách của 1 thư viện lưu các TT ...

[School] Bài tập về DTC, Schema, DOM trong XML

Đề bài: Một chương trình quản lý thông tin sinh viên và quá trình mượn tả sách của 1 thư viện lưu các TT sau: Thông tin về SV gồm: Mã SV, Họ tên, lớp và Năm sinh. Thông tin mượn sách của sinh viên bao gồm các thông tin về những cuốn sách, ngày mượn, ngày trả. Mỗi cuốn sách mà sv mượn bao gồm: Mã sách, tên sách, NXB, Năm XB. Mỗi sinh viên có thẻ mượn nhiều cuốn sách khác nhau.

1. Định nghĩa XMl Schema với các yêu cầu:

  • Mã SV, mã sách bao gồm 4 ký tự trong đó có 2 ký tự đầu là chữ, 2 ký tự sau là số
  • Lớp của sv là một trong những giá trị cuat tập hợp các lớp: CMPM1, CNPm2, CNPM3
  • Tông tin về cuốn sách xuất hiện theo thứ tự mã sách, tên sách, nhà XB, năm XB

2. Vẽ mô hình DOM

3. Sử dụng cá dối tượng XMLDOM duyệt qua toàn bộ cấu trúc cây và hiển thị thông tin sinh viên thứ 5 và thông tin mượn trả của sinh viên đó

Giải:

Định nghĩa XML Schema

<?xml version = "1.0"?>
<xs:schema xmlnx:xs = "www.w3.org/2001/XMLSchema">
	
	 
	<xs:element name = "ThuVien">
		<xs:complexType>
			<xs:element name = "QLMuon" type = "KQLMuon"/>
		</xs:complexType>
	</xs:element>
	
	 
	<xs:complexType name = "KQLMuon" minOccurs = "0">	
		<xs:element name = "SinhVien" type = "KSinhVien"/>
		<xs:element name = "Muon" type = "KMuon"/>
	</xs:complexType>
	
	 
	<xs:complexType name = "KSinhVien">
		<xs:sequense>
			<xs:element name = "MaSV" type = "KMa"/>
			<xs:element name = "Hoten" type = "xs:string"/>
			
			 
			<xs:element name = "Lop">
				<xs:simpleType>
					<xs:restriction base = "xs:string"/>
					<xs:pattern value = "CNPM1|CNPM2|CNPM3"/>
				</xs:simpleType>
			</xs:element>
			 
			
			<xs:element name = "NamSinh" type = "xs:date">
		</xs:sequense>
	</xs:complexType> 
	
	 
	<xs:complexType name = "KMuon" minOccurs = "0">
		<xs:sequense>
			<xs:element name = "Sach" type = "KSach"/>
			<xs:element name = "NgayMuon" type = "xs:date"/>
			<xs:element name = "NgayTra" type = "xs:date"/>
		</xs:sequense>
	</xs:complexType>
	
	 
	<xs:complexType name = "KSach">
		<xs:sequense>
			<xs:element name = "MaSach" type = "KMa"/>
			<xs:element name = "TenSach" type = "xs:string"/>
			<xs:element name = "NXB" type = "xs:string"/>
			<xs:element name = "NamXB" type = "xs:Year"/>
		</xs:sequense>
	</xs:complexType>
	
	 
	<xs:simplexType name = "KMa">
		<xs:restriction base = "xs:string"/>
		<xs:pattern value = "[a-zA-Z]{2}[0-9]{2}">
	</xs:simplexType>
	
</xs:schema>

Sơ đồ DOM

Thực ra thì các bạn chỉ cần chuyển cấu trúc bên trên về dạng cây là xong.
Mô hình DOMMô hình DOM

Duyệt và in ra thông tin SV mượn thứ 5

Để duyệt và in ra thông tin ta cần dùng C#, Java, JavaScript, … Ở đây mình dùng JavaScrip.

<srcipt language = "JavaScript">
	function read(){
		var i, xmlDoc, QLMuonNode, ttSV, ttMuon, ttSach, output;
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.load("thuvien.xml");
		
		// lay thong tin sinh vien muon sach thu 5
		QLMuonNode = xmldoc.getElementsByTagName("QLMuon")[4];
		
		// lay toan bo cac node con cua SinhVien
		ttSV = QLMuonNode.firstChild.childNodes;
		
		for (i = 0; i < ttSV.length; i++){
			output += ttSV[i].nodeName + ":" + ttSV[i].nodeValue + <br/>
		}
		
		// lay toan bo cac node con cua Muon
		ttMuon = QLMuonNode.lastChild.childNodes;
		
		for (i = 1; i < ttMuon.length; i++){
			output += ttMuon[i].nodeName + ":" + ttMuon[i].nodeValue + <br/>
		}
		
		// lay toan bo cac node con cua Sach, Sach nam tai node[0] cua ttMuon
		ttSach = ttMuon[0].childNodes;
		
		for (i = 0; i < ttSach.length; i++){
			output += ttSach[i].nodeName + ":" + ttSach[i].nodeValue + <br/>
		}
		
		// hien thi thong tin
		document.write(output);
	}
</srcipt>
0