
- Groovy 教程
- Groovy - 首頁
- Groovy - 概述
- Groovy - 環境配置
- Groovy - 基本語法
- Groovy - 資料型別
- Groovy - 變數
- Groovy - 運算子
- Groovy - 迴圈
- Groovy - 條件判斷
- Groovy - 方法
- Groovy - 檔案 I/O
- Groovy - 可選值
- Groovy - 數字
- Groovy - 字串
- Groovy - 範圍
- Groovy - 列表
- Groovy - 對映
- Groovy - 日期和時間
- Groovy - 正則表示式
- Groovy - 異常處理
- Groovy - 面向物件程式設計
- Groovy - 泛型
- Groovy - 特質
- Groovy - 閉包
- Groovy - 註解
- Groovy - XML
- Groovy - JMX
- Groovy - JSON
- Groovy - DSL
- Groovy - 資料庫
- Groovy - 構造器
- Groovy - 命令列
- Groovy - 單元測試
- Groovy - 模板引擎
- Groovy - 元物件程式設計
- Groovy 有用資源
- Groovy - 快速指南
- Groovy - 有用資源
- Groovy - 討論
Groovy - XML
XML 是一種可移植的開源語言,允許程式設計師開發其他應用程式可以讀取的應用程式,而不管作業系統和/或開發語言如何。這是用於在應用程式之間交換資料的最常用語言之一。
什麼是 XML?
可擴充套件標記語言 XML 是一種標記語言,類似於 HTML 或 SGML。這是全球資訊網聯盟推薦的開放標準。XML 對於跟蹤少量到中等數量的資料非常有用,而無需 SQL 資料庫作為基礎。
Groovy 中的 XML 支援
Groovy 語言也提供了豐富的 XML 語言支援。使用的兩個最基本的 XML 類是:
XML 標記構建器 - Groovy 支援基於樹的標記生成器 BuilderSupport,可以對其進行子類化以建立各種樹狀物件表示。通常,這些構建器用於表示 XML 標記、HTML 標記。Groovy 的標記生成器捕獲對偽方法的呼叫,並將它們轉換為樹結構的元素或節點。這些偽方法的引數被視為節點的屬性。作為方法呼叫一部分的閉包被視為生成的樹節點的巢狀子內容。
XML 解析器 - Groovy XmlParser 類採用簡單的模型將 XML 文件解析為 Node 例項的樹。每個 Node 都有 XML 元素的名稱、元素的屬性以及對任何子 Node 的引用。此模型足以滿足大多數簡單的 XML 處理需求。
對於所有 XML 程式碼示例,讓我們使用以下簡單的 XML 檔案 movies.xml 來構建 XML 檔案並隨後讀取檔案。
<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>
XML 標記構建器
語法
public MarkupBuilder()
MarkupBuilder 用於構建整個 XML 文件。XML 文件是透過首先建立 XML 文件類的物件來建立的。建立物件後,可以呼叫偽方法來建立 XML 文件的各種元素。
讓我們來看一個如何從上面的 XML 文件建立一個塊(即一個 movie 元素)的示例:
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') } } }
在上面的示例中,需要注意以下幾點:
mB.collection() - 這是一個標記生成器,它建立 `
` 的頭部 XML 標記。 movie(title : 'Enemy Behind') - 這些偽方法建立具有此方法建立標記值的子標記。透過指定名為 title 的值,這實際上表示需要為元素建立屬性。
向偽方法提供一個閉包以建立 XML 文件的其餘元素。
初始化 MarkupBuilder 類的預設建構函式,以便生成的 XML 輸出到標準輸出流。
執行上面的程式,我們將得到以下結果:
<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>
為了建立整個 XML 文件,需要執行以下操作:
- 需要建立一個對映條目來儲存元素的不同值。
- 對於對映的每個元素,我們將值分配給每個元素。
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]) } } } } }
執行上面的程式,我們將得到以下結果:
<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>
XML 解析
Groovy XmlParser 類採用簡單的模型將 XML 文件解析為 Node 例項的樹。每個 Node 都有 XML 元素的名稱、元素的屬性以及對任何子 Node 的引用。此模型足以滿足大多數簡單的 XML 處理需求。
語法
public XmlParser() throws ParserConfigurationException, SAXException
以下程式碼展示瞭如何使用 XML 解析器讀取 XML 文件。
讓我們假設我們有相同名為 Movies.xml 的文件,並且我們想要解析 XML 文件並向用戶顯示正確的輸出。以下程式碼片段展示了我們如何遍歷 XML 文件的整個內容並向用戶顯示正確的響應。
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("*******************************") } } }
執行上面的程式,我們將得到以下結果:
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
關於上述程式碼需要注意的重要事項:
正在形成 XmlParser 類的物件,以便它可以用於解析 XML 文件。
解析器被賦予 XML 檔案的位置。
對於每個 movie 元素,我們使用閉包來瀏覽每個子節點並顯示相關資訊。
對於 movie 元素本身,我們使用 @ 符號來顯示附加到 movie 元素的 title 屬性。