Tải bản đầy đủ (.pdf) (28 trang)

JAVA DOM (Document Object Model) docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (715.73 KB, 28 trang )

DOM
(Document Object Model)
GV: Vũ Đình Hồng
Khoa: CNTT – TỨD


Nội dung thuyết trình
 DOM là gì?
Các phần của DOM
Lợi ích và hạn chế của DOM
Cấu trúc và các đối tượng trong DOM
XML DOM
XML DOM PARSER
Cách tạo DOM
Tạo đối tượng DOM
Duyệt qua tài liệu
Biên tập tài liệu
Ví dụ


Giới thiệu
Ứng với mỗi cấu trúc tài liệu phải có một

cách thức để truy xuất
 khó phát triển ứng dụng
Cần xây dựng một thư viện tổng quát sử dụng
cho mọi tài liệu
 DOM ra đời.
 />

DOM là gì?


DOM là một API( Application Programing
Interface) độc lập nền và ngơn ngữ cho phép
chương trình và script truy xuất động và cập
nhật nội dung, cấu trúc và style của tài liệu .
DOM có nhiều phiên bản: DOM Level 1, DOM
Level 2, DOM Level 3 (draft).


DOM(tt)
DOM được chia làm các phần khác nhau (Core,
XML, và HTML):
 CORE DOM - định nghĩa tập các đối tượng
chuẩn cho tất cả tài liệu có cấu trúc
XML DOM - định nghĩa tập các đối tượng
chuẩn cho tài liệu XML
HTML DOM - định nghĩa tập các đối tượng
chuẩn cho tài liệu HTML


DOM(tt)
HTML DOM (Document Object Model for HTML)
HTML DOM định nghĩa tập các đối tượng chuẩn cho
HTML, và các tiêu chuẩn truy xuất và xử lý tài liệu
HTML
XML DOM (Document Object Model for XML)
XML DOM định nghĩa tập các đối tượng chuẩn cho XML,
và các tiêu chuẩn truy xuất và xử lý tài liệu XML
XML DOM cho phép đọc, tạo ra, và sửa các tài
liệu XML



Lợi ích của DOM
DOM giúp ta thao tác trên dữ liệu cây dễ dàng.
Mỗi khi load file XML lên, DOM sẽ đọc tồn bộ tài

liệu XML lên bộ nhớ chính và xây dựng một cấu
trúc cây để lưu dữ liệu vào cây đó, tạo ra DOM
Tree.
Trình phân tích DOM (DOM Parser) giúp ta có thể
truy cập vào file XML, do đó dùng DOM sẽ linh
động hơn.
Điều này có nghĩa là ta có thể thao tác bất kỳ lúc
nào khi ta muốn


Hạn chế của DOM
DOM xây dựng một cây lưu trữ của tồn văn

bản. Nếu văn bản q lớn, nó địi hỏi một số
lượng bộ nhớ rất lớn.
DOM tạo nên các chủ thể biểu đạt mọi thứ
trong văn bản gốc. Nếu bạn chỉ quan tâm tới
một phần nhỏ trong văn bản, thì sẽ vơ cùng
lãng phí.
Bộ kiểm ngữ DOM phải đọc toàn văn. Đối với
những văn bản quá lớn, điều này sẽ bị kéo dài
đáng kể.


Cấu trúc DOM

Một DOM Document là một tập của các nút, hay những

mẩu thông tin, được tổ chức trong một hệ phân cấp (biểu
đồ cây).
Hệ phân cấp này cho phép một người phát triển điều
hướng quanh biểu đồ hình cây để tìm kiếm thơng tin cụ
thể.
Phân tích cấu trúc Dom thường địi hỏi tồn bộ tài liệu
phải được nạp và hệ phân cấp cần được xây dựng trước
DOM có thể được gọi là dựa trên biểu đồ cây, hay dựa
trên đối tượng.


Các đối tượng trong DOM
Đối tượng tài liệu (xmlDocument) :
Bao gồm nhiều đối tượng thẻ dữ liệu (xmlElement)
cho phép sử dụng thẻ gốc thông qua đối tượng

DocumentElement.

Đối tượng thẻ dữ liệu (xmlElement) :
Bao gồm nhiều đối tượng thuộc tính xmlAttribute
Bao gồm nhiều đối tượng thẻ con xmlElement
Có thể có hay khơng có đối tượng giá trị xmlValue

Đối tượng thuộc tính (xmlAttribute) : Lưu trữ

thông tin trong thực tế



XML DOM
Toàn bộ tài liệu là một nút

tài liệu (document node)
Mọi thẻ XML là một nút
thẻ(element node)
Text trong trong các thẻ
XML là nút text(text node)
Mọi thuộc tính là một nút
thuộc tính (attribute node)
Ghi chú là nút ghi
chú(comment node)

<?xml version="1.0" >
<name>
<first>A</first>
<middle>Van</middle>
<last>Nguyen</last>
</name>
Name
first
A
middle
Van
last
Nguyen


XML DOM Parser
 Để đọc, cập nhật, tạo và thao tác 1 tài liệu


XML ta cần 1 XML Parser
 Có nhiều XML Parser được hỗ trợ trong hầu
hết các ngôn ngữ (JAVA, JavaScript, .NET, ..)
 Parser nạp tài liệu XML vào trong bộ nhớ máy
tính và được xem dưới dạng cây Node
 Sau đó, dữ liệu được thao tác và xử lý thông
qua tập hàm XML DOM API


XML parser là một trình phân tích để phân

tích dữ liệu từ tài liệu XML sang mơ hình
DOM để xử lý

XML DOM API


Lộ trình DOM


Sử dụng DOM để lấy dữ
liệu
Toàn bộ tài liệu XML được chuyển đổi sang mơ hình

đối tượng.
Element được chuyển thành node
Element Content tương ứng một node
Mỗi attribute tương ứng một node
Tùy theo từng loại node sẽ có cách lấy dữ liệu

tương ứng.
Sau khi mở tài liệu XML, toàn bộ tài liệu được thành
một node. Để truy xuất đến root Node có thể dùng
thuộc tính documentElement hay là firstChild.


Orders.xml
<?xml version="1.0" encoding="UTF-8" ?>

 <order>
  <status>PROCESSED</status>
  <customerid>2341</customerid>
  <amount>874.00</amount>
  </order>
 <order>
  <status>REJECTED</status>
  <customerid>251222</customerid>
  <amount>200.00</amount>
  </order>
  </processedOrders>


Tạo đối tượng DOM
Để làm việc với thông tin trong một tệp

XML -> phân tích để tạo ra một đối
tượng Document.
1. Tạo DocumentBuilderFactory. Đối
tượng này tạo ra DocumentBuilder.
2. Tạo DocumentBuilder.

DocumentBuilder thực hiện phân tích hiện
thời để tạo ra đối tượng Document.
3. Phân tích tệp để tạo ra đối tượng
Document.


Tạo đối tượng DOM
File docFile = new File("orders.xml");
Document doc = null;      
try {
DocumentBuilderFactory dbf=
DocumentBuilderFactory.newInstance();
dbf.setValidating(true); 
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(docFile);
}
catch (Exception e) {
System.out.print("Problem parsing the file
"+e.getMessage());
System.exit(1);
}


Duyệt qua tài liệu
Lấy phần tử gốc
Lấy các nút con của một nút và duyệt qua các

nút con.



Duyệt qua tài liệu
//Lấy node gốc
Element root = doc.getDocumentElement();
System.out.println("The root element is " +
root.getNodeName());
// Đếm số node con
NodeList children=root.getChildNodes();
System.out.println("There are " +
children.getLength() + " nodes in this
document.");


Duyệt qua tài liệu(tt)
//Xuất giá trị các node con
for (Node child = root.getFirstChild(); 
child != null; child = 
child.getNextSibling()) 
{
System.out.println(child.getNodeName()
+" = " +child.getNodeValue());
}


Biên tập tài liệu
Thay đổi giá trị của một nút
Thêm các nút
Xóa một nút
Thay thế một nút
Tạo và thiết lập các thuộc tính
Xóa một thuộc tính



Biên tập tài liệu
//
private static void changeOrder (Node start, String 
elemName, String elemValue) 
{
if (start.getNodeName().equals(elemName)) 
{
start.getFirstChild().setNodeValue(elemValue);
}
for (Node child = start.getFirstChild();
   child != null; child = child.getNextSibling()) 
{
changeOrder(child, elemName, elemValue);
}
}


Biên tập tài liệu
changeOrder(root, "status","processing");
NodeList order=
root.getElementsByTagName("status");
for (int orderNum = 0; orderNum < 
orders.getLength(); orderNum++) 
{
System.out.println(orders.item(orderNum) .
getFirstChild().getNodeValue());
}



Circle.xml
<?xml version="1.0" ?>
- <DOCUMENT>
  <CIRCLE X="200" Y="160" RADIUS="50" />
  <CIRCLE X="170" Y="100" RADIUS="15" />
  <CIRCLE X="80" Y="200" RADIUS="45" />
  <CIRCLE X="200" Y="140" RADIUS="35" />
  <CIRCLE X="130" Y="240" RADIUS="25" />
  <CIRCLE X="270" Y="300" RADIUS="45" />
  <CIRCLE X="210" Y="240" RADIUS="25" />
  <CIRCLE X="60" Y="160" RADIUS="35" />
  <CIRCLE X="160" Y="260" RADIUS="55" />
  </DOCUMENT>


×