Groovy - XML
XML là một ngôn ngữ mã nguồn mở, di động cho phép các lập trình viên phát triển các ứng dụng mà các ứng dụng khác có thể đọc được, bất kể hệ điều hành và / hoặc ngôn ngữ phát triển. Đây là một trong những ngôn ngữ phổ biến nhất được sử dụng để trao đổi dữ liệu giữa các ứng dụng.
XML là gì?
Ngôn ngữ đánh dấu mở rộng XML là một ngôn ngữ đánh dấu giống như HTML hoặc SGML. Điều này được khuyến nghị bởi World Wide Web Consortium và có sẵn như một tiêu chuẩn mở. XML cực kỳ hữu ích để theo dõi lượng dữ liệu vừa và nhỏ mà không yêu cầu xương sống dựa trên SQL.
Hỗ trợ XML trong Groovy
Ngôn ngữ Groovy cũng cung cấp sự hỗ trợ phong phú cho ngôn ngữ XML. Hai lớp XML cơ bản nhất được sử dụng là:
XML Markup Builder- Groovy hỗ trợ trình tạo đánh dấu dựa trên cây, BuilderSupport, có thể được phân lớp để tạo nhiều dạng biểu diễn đối tượng có cấu trúc cây. Thông thường, các trình xây dựng này được sử dụng để biểu diễn đánh dấu XML, đánh dấu HTML. Trình tạo đánh dấu của Groovy bắt các lệnh gọi đến các điểm giả và chuyển đổi chúng thành các phần tử hoặc nút của cấu trúc cây. Các tham số của các nút giả này được coi là thuộc tính của các nút. Các đóng như một phần của lệnh gọi phương thức được coi là nội dung phụ lồng nhau cho nút cây kết quả.
XML Parser- Lớp Groovy XmlParser sử dụng một mô hình đơn giản để phân tích cú pháp một tài liệu XML thành một cây các cá thể Node. Mỗi Node có tên của phần tử XML, các thuộc tính của phần tử và các tham chiếu đến bất kỳ Node con nào. Mô hình này là đủ để xử lý XML đơn giản nhất.
Đối với tất cả các ví dụ về mã XML của chúng tôi, hãy sử dụng tệp XML phim.xml đơn giản sau để xây dựng tệp XML và đọc tệp sau đó.
<collection shelf = "New Arrivals">
<movie title = "Enemy Behind">
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
<movie title = "Transformers">
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>8</stars>
<description>A schientific fiction</description>
</movie>
<movie title = "Trigun">
<type>Anime, Action</type>
<format>DVD</format>
<year>1986</year>
<rating>PG</rating>
<stars>10</stars>
<description>Vash the Stam pede!</description>
</movie>
<movie title = "Ishtar">
<type>Comedy</type>
<format>VHS</format>
<year>1987</year>
<rating>PG</rating>
<stars>2</stars>
<description>Viewable boredom </description>
</movie>
</collection>
Trình tạo đánh dấu XML
Cú pháp
public MarkupBuilder()
MarkupBuilder được sử dụng để xây dựng toàn bộ tài liệu XML. Tài liệu XML được tạo bằng cách tạo một đối tượng của lớp tài liệu XML trước tiên. Khi đối tượng được tạo, một phương pháp giả có thể được gọi để tạo các phần tử khác nhau của tài liệu XML.
Hãy xem ví dụ về cách tạo một khối, tức là một phần tử phim từ tài liệu XML ở trên -
import groovy.xml.MarkupBuilder
class Example {
static void main(String[] args) {
def mB = new MarkupBuilder()
// Compose the builder
mB.collection(shelf : 'New Arrivals') {
movie(title : 'Enemy Behind')
type('War, Thriller')
format('DVD')
year('2003')
rating('PG')
stars(10)
description('Talk about a US-Japan war')
}
}
}
Trong ví dụ trên, cần lưu ý những điều sau:
mB.collection() - Đây là trình tạo đánh dấu tạo thẻ XML đầu của <collection> </collection>
movie(title : 'Enemy Behind')- Các pseudomethods này tạo các thẻ con bằng phương pháp này tạo thẻ có giá trị. Bằng cách chỉ định một giá trị được gọi là tiêu đề, điều này thực sự chỉ ra rằng một thuộc tính cần được tạo cho phần tử.
Một bao đóng được cung cấp cho phương pháp giả để tạo các phần tử còn lại của tài liệu XML.
Hàm tạo mặc định cho lớp MarkupBuilder được khởi tạo để XML được tạo ra được cấp cho luồng đầu ra chuẩn
Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:
<collection shelf = 'New Arrivals'>
<movie title = 'Enemy Behind' />
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>10</stars>
<description>Talk about a US-Japan war</description>
</movie>
</collection>
Để tạo toàn bộ tài liệu XML, cần thực hiện những việc sau.
- Một mục bản đồ cần được tạo để lưu trữ các giá trị khác nhau của các phần tử.
- Đối với mỗi phần tử của bản đồ, chúng tôi đang gán giá trị cho mỗi phần tử.
import groovy.xml.MarkupBuilder
class Example {
static void main(String[] args) {
def mp = [1 : ['Enemy Behind', 'War, Thriller','DVD','2003',
'PG', '10','Talk about a US-Japan war'],
2 : ['Transformers','Anime, Science Fiction','DVD','1989',
'R', '8','A scientific fiction'],
3 : ['Trigun','Anime, Action','DVD','1986',
'PG', '10','Vash the Stam pede'],
4 : ['Ishtar','Comedy','VHS','1987', 'PG',
'2','Viewable boredom ']]
def mB = new MarkupBuilder()
// Compose the builder
def MOVIEDB = mB.collection('shelf': 'New Arrivals') {
mp.each {
sd ->
mB.movie('title': sd.value[0]) {
type(sd.value[1])
format(sd.value[2])
year(sd.value[3])
rating(sd.value[4])
stars(sd.value[4])
description(sd.value[5])
}
}
}
}
}
Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:
<collection shelf = 'New Arrivals'>
<movie title = 'Enemy Behind'>
<type>War, Thriller</type>
<format>DVD</format>
<year>2003</year>
<rating>PG</rating>
<stars>PG</stars>
<description>10</description>
</movie>
<movie title = 'Transformers'>
<type>Anime, Science Fiction</type>
<format>DVD</format>
<year>1989</year>
<rating>R</rating>
<stars>R</stars>
<description>8</description>
</movie>
<movie title = 'Trigun'>
<type>Anime, Action</type>
<format>DVD</format>
<year>1986</year>
<rating>PG</rating>
<stars>PG</stars>
<description>10</description>
</movie>
<movie title = 'Ishtar'>
<type>Comedy</type>
<format>VHS</format>
<year>1987</year>
<rating>PG</rating>
<stars>PG</stars>
<description>2</description>
</movie>
</collection>
Phân tích cú pháp XML
Lớp Groovy XmlParser sử dụng một mô hình đơn giản để phân tích cú pháp một tài liệu XML thành một cây các thể hiện Node. Mỗi Node có tên của phần tử XML, các thuộc tính của phần tử và các tham chiếu đến bất kỳ Node con nào. Mô hình này là đủ để xử lý XML đơn giản nhất.
Cú pháp
public XmlParser()
throws ParserConfigurationException,
SAXException
Đoạn mã sau đây cho thấy một ví dụ về cách có thể sử dụng trình phân tích cú pháp XML để đọc một tài liệu XML.
Giả sử chúng ta có cùng một tài liệu tên là Movies.xml và chúng ta muốn phân tích cú pháp tài liệu XML và hiển thị đầu ra thích hợp cho người dùng. Đoạn mã sau là đoạn mã về cách chúng tôi có thể xem qua toàn bộ nội dung của tài liệu XML và hiển thị phản hồi thích hợp cho người dùng.
import groovy.xml.MarkupBuilder
import groovy.util.*
class Example {
static void main(String[] args) {
def parser = new XmlParser()
def doc = parser.parse("D:\\Movies.xml");
doc.movie.each{
bk->
print("Movie Name:")
println "${bk['@title']}"
print("Movie Type:")
println "${bk.type[0].text()}"
print("Movie Format:")
println "${bk.format[0].text()}"
print("Movie year:")
println "${bk.year[0].text()}"
print("Movie rating:")
println "${bk.rating[0].text()}"
print("Movie stars:")
println "${bk.stars[0].text()}"
print("Movie description:")
println "${bk.description[0].text()}"
println("*******************************")
}
}
}
Khi chúng ta chạy chương trình trên, chúng ta sẽ nhận được kết quả sau:
Movie Name:Enemy Behind
Movie Type:War, Thriller
Movie Format:DVD
Movie year:2003
Movie rating:PG
Movie stars:10
Movie description:Talk about a US-Japan war
*******************************
Movie Name:Transformers
Movie Type:Anime, Science Fiction
Movie Format:DVD
Movie year:1989
Movie rating:R
Movie stars:8
Movie description:A schientific fiction
*******************************
Movie Name:Trigun
Movie Type:Anime, Action
Movie Format:DVD
Movie year:1986
Movie rating:PG
Movie stars:10
Movie description:Vash the Stam pede!
*******************************
Movie Name:Ishtar
Movie Type:Comedy
Movie Format:VHS
Movie year:1987
Movie rating:PG
Movie stars:2
Movie description:Viewable boredom
Những điều quan trọng cần lưu ý về mã trên.
Một đối tượng của lớp XmlParser đang được hình thành để nó có thể được sử dụng để phân tích cú pháp tài liệu XML.
Trình phân tích cú pháp được cung cấp vị trí của tệp XML.
Đối với mỗi phần tử phim, chúng tôi đang sử dụng một bao đóng để duyệt qua từng nút con và hiển thị thông tin liên quan.
Đối với bản thân phần tử phim, chúng tôi đang sử dụng ký hiệu @ để hiển thị thuộc tính tiêu đề được đính kèm với phần tử phim.