XML是一种便携的开放源代码语言,允许程序员开发可以被其他应用程序读取的应用程序,而不管操作系统和/或开发语言。这是用于在应用程序之间交换数据的最常用的语言之一
可扩展标记语言XML是一种非常类似于HTML或SGML的标记语言。这是万维网联盟推荐的,可作为开放标准。XML对于跟踪少量到中等数据量而不需要基于SQL的骨干非常有用。
XML标记构建器 - Groovy支持基于树的标记生成器BuilderSupport,它可以被子类化以生成各种树结构对象表示。通常,这些构建器用于表示XML标记,HTML标记。 Groovy的标记生成器捕获对伪方法的调用,并将它们转换为树结构的元素或节点。这些伪方法的参数被视为节点的属性。作为方法调用一部分的闭包被视为生成的树节点的嵌套子内容。
XML解析器 - Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。
这是一个xml示例文件
- <collection shelf = "New Arrivals">
-
- <movie title = "Enemy Behind">
- <type>War, Thrillertype>
- <format>DVDformat>
- <year>2003year>
- <rating>PGrating>
- <stars>10stars>
- <description>Talk about a US-Japan wardescription>
- movie>
-
- <movie title = "Transformers">
- <type>Anime, Science Fictiontype>
- <format>DVDformat>
- <year>1989year>
- <rating>Rrating>
- <stars>8stars>
- <description>A schientific fictiondescription>
- movie>
-
- <movie title = "Trigun">
- <type>Anime, Actiontype>
- <format>DVDformat>
- <year>1986year>
- <rating>PGrating>
- <stars>10stars>
- <description>Vash the Stam pede!description>
- movie>
-
- <movie title = "Ishtar">
- <type>Comedytype>
- <format>VHSformat>
- <year>1987year>
- <rating>PGrating>
- <stars>2stars>
- <description>Viewable boredom description>
- movie>
-
- collection>
MarkupBuilder用于构造整个XML文档。通过首先创建XML文档类的对象来创建XML文档。一旦创建了对象,可以调用伪方法来创建XML文档的各种元素。
- import groovy.xml.MarkupBuilder
- class Example {
- static void main(String[] args) {
- def mB = new MarkupBuilder()
-
- // Compose the builder
- //mb.collection这是一个标记生成器,用于创建
collection>的头XML标签 - mB.collection(shelf : 'New Arrivals') {
- //movie(title : 'Enemy Behind') -这些伪方法使用此方法创建带有值的标记的子标记。通过指定一个名为title的值,这实际上表示需要为该元素创建一个属性。
- movie(title : 'Enemy Behind')
- type('War, Thriller')
- format('DVD')
- year('2003')
- rating('PG')
- stars(10)
- description('Talk about a US-Japan war')
- }
- }
- }
如果创建整个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])
- }
- }
- }
- }
- }
Groovy XmlParser类使用一个简单的模型来将XML文档解析为Node实例的树。每个节点都有XML元素的名称,元素的属性和对任何子节点的引用。这个模型足够用于大多数简单的XML处理。
将movies.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("*******************************")
- }
- }
- }
JsonSlurper是一个将JSON文本或阅读器内容解析为Groovy数据结构的类,如地图,列表和原始类型,如Integer,Double,Boolean和String。
示例是使用http模块从Web服务器获取JSON数据。对于这种类型的遍历,最好的选择是将解析器类型设置为JsonParserLax变体。
- http.request( GET, TEXT ) {
- headers.Accept = 'application/json'
- headers.'User-Agent' = USER_AGENT
-
- response.success = {
- res, rd ->
- def jsonText = rd.text
-
- //Setting the parser type to JsonParserLax
- def parser = new JsonSlurper().setType(JsonParserType.LAX)
- def jsonResp = parser.parseText(jsonText)
- }
- }
- import groovy.json.JsonSlurper
-
- class Example {
- static void main(String[] args) {
- def jsonSlurper = new JsonSlurper()
- //使用JsonSlurper类的parseText函数来解析一些JSON文本
- def object = jsonSlurper.parseText('{ "name": "John", "ID" : "1"}')
- //获取对象时,看到实际上可以通过键访问JSON字符串中的值
- println(object.name);
- println(object.ID);
- }
- }
- import groovy.json.JsonSlurper
- class Example {
- static void main(String[] args) {
- def jsonSlurper = new JsonSlurper()
- Object lst = jsonSlurper.parseText('{ "List": [2, 3, 4, 5] }')
- lst.each { println it }
- }
- }
JSON解析器还支持字符串,数字,对象,true,false和null的原始数据类型。 JsonSlurper类将这些JSON类型转换为相应的Groovy类型。
- import groovy.json.JsonSlurper
- class Example {
-
- static void main(String[] args) {
- def jsonSlurper = new JsonSlurper()
- def obj = jsonSlurper.parseText ''' {"Integer": 12, "fraction": 12.55, "double": 12e13}'''
-
- println(obj.Integer);
- println(obj.fraction);
- println(obj.double);
- }
- }
在json中打印输出,使用JsonOutput方法来完成。此方法负责将Groovy对象序列化为JSON字符串。
- import groovy.json.JsonOutput
- class Example {
- static void main(String[] args) {
- def output = JsonOutput.toJson([name: 'John', ID: 1])
- println(output);
- }
- }
JsonOutput也可以用于普通的旧Groovy对象
- import groovy.json.JsonOutput
- class Example {
- static void main(String[] args) {
- def output = JsonOutput.toJson([ new Student(name: 'John',ID:1),
- new Student(name: 'Mark',ID:2)])
- println(output);
- }
- }
-
- class Student {
- String name
- int ID;
- }