定义一个xml格式数据:
final String xml = '''
<response version-api="2.0">
<value>
<books id="1" classification="android">
<book available="20" id="1">
<title>疯狂Android讲义</title>
<author id="1">李刚</author>
</book>
<book available="14" id="2">
<title>第一行代码</title>
<author id="2">郭林</author>
</book>
<book available="13" id="3">
<title>Android开发艺术探索</title>
<author id="3">任玉刚</author>
</book>
<book available="5" id="4">
<title>Android源码设计模式</title>
<author id="4">何红辉</author>
</book>
</books>
<books id="2" classification="web">
<book available="10" id="1">
<title>Vue从入门到精通</title>
<author id="4">李刚</author>
</book>
</books>
</value>
</response>
解析数据:
def xmlSlurper = new XmlSlurper()
def response = xmlSlurper.parseText(xml)
println response.value.books[0].book[0].title
println response.value.books[1].book.@available
println response.value.books[0].book[1].author
打印输出如下:
疯狂Android讲义
10
郭林
查询作者是李刚的书名:
def listBook = []
response.value.books.each { books ->
books.book.each { book ->
if (book.author == '李刚') {
listBook.add(book.title)
}
}
}
println listBook
打印输出如下:
[疯狂Android讲义, Vue从入门到精通]
深度遍历xml数据(可以用**替换depthFirst())
def listTitle = response.depthFirst().findAll { book ->
book.author == '李刚'
}.collect { book ->
book.title
}
println listTitle
打印输出如下:
[疯狂Android讲义, Vue从入门到精通]
广度遍历xml数据(可以用*替换children())
println response.value.books.children().findAll { node ->
node.name() == 'book' && node.@id == '2'
}.collect { node ->
node.title
}
打印输出如下:
[第一行代码]
Groovy中如何创建一个xml格式数据
现在有一个xml格式数据:
<langs type='current' count='3' mainstream='true'>
<language flavor='static' version='1.5'>Java</language>
<language flavor='dynamic' version='1.6'>Groovy</language>
<language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>
我们接下来要做的就是用代码生成这段xml数据:
def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw) //用来生成xml数据的核心类
xmlBuilder.langs(type: 'current', count: '3', mainstream: 'true') {
language(flavor: 'static', version: '1.5', 'Java')
language(flavor: 'dynamic', version: '1.6', 'Groovy')
language(flavor: 'dynamic', version: '1.9', 'JavaScript')
}
println sw
打印输出如下:
<langs type='current' count='3' mainstream='true'>
<language flavor='static' version='1.5'>Java</language>
<language flavor='dynamic' version='1.6'>Groovy</language>
<language flavor='dynamic' version='1.9'>JavaScript</language>
</langs>
但是事实上,我们往往不是这样去拼凑xml数据的,而是通过数据类来得到xml数据的:
class Langs {
String type = 'current'
int count = 3
boolean mainstream = true
def languages = [new language(flavor: 'static', version: 1.5, value: 'Java'),
new language(flavor: 'dynamic', version: 1.6, value: 'Groovy'),
new language(flavor: 'dynamic', version: 1.9, value: 'JavaScript')]
}
class language {
String flavor
float version
String value
}
def sw = new StringWriter()
def xmlBuilder = new MarkupBuilder(sw) //用来生成xml数据的核心类
def langs = new Langs()
xmlBuilder.langs(type: langs.type, count: langs.count, mainstream: langs.mainstream) {
langs.languages.each {lang ->
language(flavor: lang.flavor, version: lang.version, lang.value)
}
}
println sw
打印输出结果一样。
喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!