Đọc tập tin XML sử dụng DOM trong Java – Hướng Dẫn Java

DOM (Document Object Model) là tập hợp những interface của Java giúp chúng ta có thể dễ dàng truy cập và chỉnh sửa cấu trúc, nội dung của một tập tin XML. Trong bài viết này, chúng ta sẽ tìm hiểu làm thế nào để đọc tập tin XML sử dụng DOM trong Java các bạn nhé!

Đầu tiên, mình sẽ liệt kê một số interface mà chúng ta thường dùng khi làm việc với DOM:

  • org.w3c.dom.Document
  • org.w3c.dom.Node
  • org.w3c.dom.Element
  • org.w3c.dom.Attr
  • org.w3c.dom.Text

Mỗi một interface này sẽ có một hoặc nhiều class khác nhau implement nó tuỳ theo cấu trúc của nội dung XML mà chúng ta cần process các bạn nhé!

Tiếp theo, mình sẽ tạo và làm việc với một project Maven để minh họa cho việc đọc tập tin XML sử dụng DOM.

Mình có project như sau:

Đọc tập tin XML sử dụng DOM trong Java

Tập tin XML chúng ta cần đọc là students.xml có nội dung như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

<?

xml

version

=

“1.0”

encoding

=

“UTF-8”

standalone

=

“no”

?>

<students>

<student

n0

=

‘1’

>

<name>

John

</name>

<code>

12345

</code>

<age>

19

</age>

</student>

<student

n0

=

‘2’

>

<name>

Marry

</name>

<code>

23456

</code>

<age>

24

</age>

</student>

</students>

Tập tin này chứa thông tin của 2 sinh viên bao gồm tên (name), mã sinh viên (code) và tuổi (age) của mỗi sinh viên. Mỗi sinh viên sẽ được đánh số thứ tự thông qua thuộc tính n0.

OK, giờ chúng ta bắt đầu đọc tập tin này các bạn nhé!

Đầu tiên, để có thể đọc được tập tin students.xml, chúng ta cần phải khởi tạo đối tượng File cho tập tin này:

1

File

f

=

new

File

(

“students.xml”

)

;

Tiếp theo, chúng ta cần khởi tạo đối tượng Document chứa thông tin của tập tin XML từ đối tượng File đã được tạo ra ở trên:

1

2

3

DocumentBuilderFactory

factory

=

DocumentBuilderFactory

.

newInstance

(

)

;

DocumentBuilder

buider

=

factory

.

newDocumentBuilder

(

)

;

Document

doc

=

buider

.

parse

(

f

)

;

Để đọc tập tin XML với DOM, chúng ta sẽ đọc từng thẻ của nó từ ngoài vào trong theo thứ tự phân cấp của chúng.

Trong tập tin students.xml thì thẻ <students> là thẻ ngoài cùng nhất, hay còn gọi là root element. Để đọc được thẻ này chúng ta dùng phương thức sau:

1

Element

students

=

doc

.

getDocumentElement

(

)

;

Trong DOM, một thẻ được xác định là một Element.

Bây giờ, chúng ta đã có thông tin của thẻ <students> rồi, để lấy thông tin của các thẻ <student>, chúng ta sẽ dùng thẻ <students> để lấy chúng.

1

NodeList

studentList

=

students

.

getElementsByTagName

(

“student”

)

;

Đối tượng NodeList sẽ chứa thông tin 2 thẻ <student> có trong tập tin XML. Bây giờ chúng ta sẽ đi qua từng thẻ để đọc thông tin của chúng:

1

2

3

4

5

6

for

(

int

i

=

0

;

i

<

studentList

.

getLength

(

)

;

i

++

)

{

Node

node

=

studentList

.

item

(

i

)

;

if

(

node

.

getNodeType

(

)

==

Node

.

ELEMENT_NODE

)

{

Element

student

=

(

Element

)

node

;

}

}

Một Node là một nút trong cây DOM của chúng ta. Chúng ta cần đưa nó về đối tượng Element để sử dụng.

OK, giờ chúng ta đã có đối tượng chứa thông tin của các thẻ <student>. Nhiệm vụ bây giờ là chúng ta đọc chúng thôi.

Để đọc được thuộc tính số thứ tự, chúng ta chỉ cần làm như sau:

1

student

.

getAttribute

(

“n0”

)

;

với n0 là tên của thuộc tính.

Bởi vì bây giờ chúng ta đang đọc thẻ <student> và mỗi thẻ <student> chỉ có một thẻ con cho tên, mã sinh viên và tuổi nên chúng ta có thể đọc những thông tin này như sau:

  • Thẻ <name>:

1

student

.

getElementsByTagName

(

“name”

)

.

item

(

0

)

.

getTextContent

(

)

;

  • Thẻ <code>:

1

student

.

getElementsByTagName

(

“code”

)

.

item

(

0

)

.

getTextContent

(

)

;

  • Thẻ <age>:

1

student

.

getElementsByTagName

(

“age”

)

.

item

(

0

)

.

getTextContent

(

)

;

OK, chúng ta đã hoàn thành việc đọc tập tin students.xml, các bạn có thể tham khảo đầy đủ code như sau:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

package

com

.

huongdanjava

.

dom

;

 

import

java

.

io

.

File

;

import

java

.

io

.

IOException

;

 

import

javax

.

xml

.

parsers

.

DocumentBuilder

;

import

javax

.

xml

.

parsers

.

DocumentBuilderFactory

;

import

javax

.

xml

.

parsers

.

ParserConfigurationException

;

 

import

org

.

w3c

.

dom

.

Document

;

import

org

.

w3c

.

dom

.

Element

;

import

org

.

w3c

.

dom

.

Node

;

import

org

.

w3c

.

dom

.

NodeList

;

import

org

.

xml

.

sax

.

SAXException

;

 

public

class

DOMExample

{

 

public

static

void

main

(

String

[

]

args

)

throws

ParserConfigurationException

,

SAXException

,

IOException

{

File

f

=

new

File

(

“students.xml”

)

;

 

DocumentBuilderFactory

factory

=

DocumentBuilderFactory

.

newInstance

(

)

;

DocumentBuilder

buider

=

factory

.

newDocumentBuilder

(

)

;

Document

doc

=

buider

.

parse

(

f

)

;

 

Element

students

=

doc

.

getDocumentElement

(

)

;

 

NodeList

studentList

=

students

.

getElementsByTagName

(

“student”

)

;

for

(

int

i

=

0

;

i

<

studentList

.

getLength

(

)

;

i

++

)

{

Node

node

=

studentList

.

item

(

i

)

;

if

(

node

.

getNodeType

(

)

==

Node

.

ELEMENT_NODE

)

{

Element

student

=

(

Element

)

node

;

 

System

.

out

.

println

(

“n0: “

+

student

.

getAttribute

(

“n0”

)

)

;

System

.

out

.

println

(

“name: “

+

student

.

getElementsByTagName

(

“name”

)

.

item

(

0

)

.

getTextContent

(

)

)

;

System

.

out

.

println

(

“code: “

+

student

.

getElementsByTagName

(

“code”

)

.

item

(

0

)

.

getTextContent

(

)

)

;

System

.

out

.

println

(

“age: “

+

student

.

getElementsByTagName

(

“age”

)

.

item

(

0

)

.

getTextContent

(

)

)

;

 

System

.

out

.

println

(

“\n”

)

;

}

}

}

}

Kết quả:

Đọc tập tin XML sử dụng DOM trong Java

4.5/5 – (4 bình chọn)