IT Research Department @BKAP 2015 Trang 1 / 22 Lab 02 Document Object Model Mục tiêu - Chỉ rõ các kiểu Node - Cách lấy giá trị của các Node trong file XML - Cách tạo các Node và giá tr
Trang 1IT Research Department @BKAP 2015 Trang 1 / 22
Lab 02 Document Object Model Mục tiêu
- Chỉ rõ các kiểu Node
- Cách lấy giá trị của các Node trong file XML
- Cách tạo các Node và giá trị các Node
- Cách cập nhật giá trị Node và giá trị Attribute
- Cách xóa Node
- Sử dụng ErrorHandler trong DOM
Phần I Bài tập step by step
Bài 2.1
In các kiểu Node có trong file Employees.xml bằng DOM:
Trang 2Step 1: Tạo project java mới trong netbean
File New Project Java Java Application
Project Name: Đặt tên project là DOMExample
Step 2: Tạo file Employees.xml
Project New XML XML Document
Employees.xml
<?xml version="1.0" encoding="UTF-8"?>
<!
To change this license header, choose License Headers in Project Properties
To change this template file, choose Tools | Templates
and open the template in the editor
>
<!DOCTYPE employees [
<!ELEMENT employees (employee)*>
<!ELEMENT employee (firstname, lastname, location, gender)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT location (#PCDATA)>
<!ELEMENT gender (#PCDATA)>
]>
<employees>
<employeeid="111">
<firstname>Allen</firstname>
<lastname>Smith</lastname>
<location>Alaska</location>
<gender>M</gender>
</employee>
<employeeid="112">
<firstname>John</firstname>
<lastname>Davis</lastname>
<location>California</location>
<gender>M</gender>
</employee>
<employeeid="113">
<firstname>Bob</firstname>
<lastname>Thomson</lastname>
<location>Kansas</location>
Trang 3IT Research Department @BKAP 2015 Trang 3 / 22
publicclass NodeTypes {
publicstaticvoid printNodes(Document n) {
printElement((Node) n, " ");
}
publicstaticvoid printElement(Node n, String indent) {
int type = n.getNodeType();
Trang 4//Lấy danh sách các Node cho Node cha
NodeList list = n.getChildNodes();
Element item = null;
for (int i = 0; i < list.getLength(); i++) {
Trang 5IT Research Department @BKAP 2015 Trang 5 / 22
//Khởi tạo file, trỏ vào file cần phân tích
File fXmlFile = new File("Employees.xml");
//Khởi tạo Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //Khởi tạo DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
//Đẩy nội dung vào Document
Document doc = builder.parse(fXmlFile);
//In các kiểu của Node, gọi method printNodes của lớp NodeTypes
NodeTypes node = new NodeTypes();
Trang 6Step 5: Build và Run ứng dụng
Bài 2.2
Sử dụng các method của Node Interface để in giá trị của Element Node
“firstname” của các Element Node “employee” trong file Employees.xml (trong project bài 2.1)
Step 1: Tạo lớp SeekingNodes.java để in các giá trị của Element Node
“firstname”
Domexample New Other Java Java Class
SeekingNodes.java
package domexample;
Trang 7IT Research Department @BKAP 2015 Trang 7 / 22
publicclass SeekingNodes {
publicstaticvoid printNodeValue(Document doc){
//Lấy danh sách các Element Node “employee”
NodeList listemp = doc.getElementsByTagName("employee");
Element emp = null;
//Duyệt từng node employee
for (int i = 0; i < listemp.getLength(); i++) {
emp = (Element) listemp.item(i);
//Lấy giá trị node firstname trong mỗi node employee
Trang 8//Khởi tạo file, trỏ vào file cần phân tích
File fXmlFile = new File("Employees.xml");
//Khởi tạo Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //Khởi tạo DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
//Đẩy nội dung vào Document
Document doc = builder.parse(fXmlFile);
//In các kiểu của Node, gọi method printNodes của lớp NodeTypes
NodeTypes node = new NodeTypes();
node.printNodes(doc);
//In giá trị các Node firstname
SeekingNodes node = new SeekingNodes ();
Project sau khi hoàn thành
Step 3: Build and Run ứng dụng
Trang 9IT Research Department @BKAP 2015 Trang 9 / 22
Bài 2.3
Tạo mới các node trong file Employees.xml
Cập nhật node trong file Employees.xml: viết hoa giá trị của các node
firstname
Cập nhật giá trị Attribute của Element employee trong file Employees.xml
với điều kiện: Nếu gender là M thì ID = “M…”, nếu là F thì ID = “F…”
Trang 10 Xóa Node trong file Employees.xml: Xóa node location trong element
employee đầu tiên
Trang 11IT Research Department @BKAP 2015 Trang 11 / 22
Phần 1: Tạo mới các node trong file Employees.xml
Step 1: Tạo lớp ControlNodes.java
domexample New Other Java Java Class
publicclass ControlNodes {
publicstaticvoid CreateNode(Document doc) {
//Get Element
Element element = doc.getDocumentElement();
//Create node employee
Node node = doc.createElement("employee");
//Create child node employee: firstname
Node nodefn = node.appendChild(doc.createElement("firstname")); Text textfn = doc.createTextNode("Michelle");
nodefn.appendChild(textfn);
//Create child node employee: lastname
Node nodeln = node.appendChild(doc.createElement("lastname")); Text textln = doc.createTextNode("Sawyer");
nodeln.appendChild(textln);
Trang 12//Create child node employee: location
Node nodel = node.appendChild(doc.createElement("location"));
Text textlocation = doc.createTextNode("Kannas");
nodel.appendChild(textlocation);
//Create child node employee: gender
Node nodeg = node.appendChild(doc.createElement("gender"));
Text textgender = doc.createTextNode("F");
// create DOMSource for source XML document
Source xmlSource = new DOMSource(doc);
// create StreamResult for transformation result
Result result = new StreamResult(new
FileOutputStream("Employees.xml"));
// create TransformerFactory
TransformerFactory transformerFactory =
TransformerFactory.newInstance();
// create Transformer for transformation
Transformer transformer = transformerFactory.newTransformer();
// transform and deliver content to client
Trang 13IT Research Department @BKAP 2015 Trang 13 / 22
File fXmlFile = new File("Employees.xml");
//Get the DOM Builder Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false);
//Get the DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fXmlFile);
// NodeTypes node = new NodeTypes();
Trang 14Step 3: Build and Run ứng dụng
Phần 2: Cập nhật Node
Step 1: Xây dựng thêm method UpdateElementValue trong ControlNodes.java
ControlNodes.java
publicstaticvoid UpdateElementValue(Document doc){
NodeList listemp = doc.getElementsByTagName("employee");
Element emp = null;
//loop for each employee
for (int i = 0; i < listemp.getLength(); i++) {
emp = (Element) listemp.item(i);
Step 2: Từ main gọi thực hiện method UpdateElementValue
publicstaticvoid main(String[] args) {
try {
File fXmlFile = new File("Employees.xml");
//Get the DOM Builder Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
Trang 15IT Research Department @BKAP 2015 Trang 15 / 22
factory.setValidating(false);
//Get the DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fXmlFile);
// NodeTypes node = new NodeTypes();
Trang 16 ControlNodes.java
publicstaticvoid UpdateAttributeValue(Document doc){
NodeList listemp = doc.getElementsByTagName("employee");
Element emp = null;
//loop for each employee
for (int i = 0; i < listemp.getLength(); i++) {
emp = (Element) listemp.item(i);
String gender =
emp.getElementsByTagName("gender").item(0).getFirstChild().getNodeValue();
if (gender.equalsIgnoreCase("M")) {
//prefix id attribute with M
emp.setAttribute("id", "M"+emp.getAttribute("id"));
} else {
//prefix id attribute with F
emp.setAttribute("id", "F"+emp.getAttribute("id"));
}
}
SaveXMLDocument(doc);
}
Step 2: Gọi method UpdateAttributeValue từ hàm main
publicstaticvoid main(String[] args) {
try {
File fXmlFile = new File("Employees.xml");
//Get the DOM Builder Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false);
//Get the DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fXmlFile);
// NodeTypes node = new NodeTypes();
Trang 17IT Research Department @BKAP 2015 Trang 17 / 22
publicstaticvoid RemoveNodeFormDOMDocumnet(Document doc){
//retrieve the element location for the first employee
Element element = (Element)
doc.getElementsByTagName("location").item(0);
//Remove the specific node
Trang 18}
Step 2: Triển khai gọi methode RemoveNodeFromDOMDocument từ hàm main
publicstaticvoid main(String[] args) {
try {
File fXmlFile = new File("Employees.xml");
//Get the DOM Builder Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false);
//Get the DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(fXmlFile);
// NodeTypes node = new NodeTypes();
Trang 19IT Research Department @BKAP 2015 Trang 19 / 22
Bài 2.4 Xây dựng lớp Handling Errors trong ứng dụng DOM: Bắt lỗi sai cấu trúc file Employees.xml trong ứng dụng DOM
Step 1: Xây dựng lớp DOMErrorHandler.java implements ErrorHandler
Trang 20 Cấu trúc Project sau khi hoàn thành
Step 2: Set ErrorHandler cho DocumentBuilder tại hàm main
publicstaticvoid main(String[] args) {
try {
File fXmlFile = new File("Employees.xml");
//Get the DOM Builder Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setValidating(false);
//Get the DOM Builder
DocumentBuilder builder = factory.newDocumentBuilder();
//Set ErrorHandler to DocumentBuilder
builder.setErrorHandler(new DOMErrorHandler());
Document doc = builder.parse(fXmlFile);
// NodeTypes node = new NodeTypes();
Trang 21IT Research Department @BKAP 2015 Trang 21 / 22
Trang 22 In các kiểu node được sử dụng
In giá trị các node tenHang, nhaSX
Tạo mới Node:
Cập nhật giá trị node nhaSX thành chữ in hoa, cập nhật giá trị Attribute của
Element hangHoa thành id = “H…”
Xóa node tenHang của element hangHoa có ID = “H003”