8.XML
java中處理xml:使用的一般是dom文檔驅(qū)動(dòng)處理或者sax事件驅(qū)動(dòng)處理
groovy處理xml
:
-
8.1: groovy中如何解析xml :
使用XmlSlurper進(jìn)行解析
final String xml = '''
<response version-api="2.0">
<value>
<books id="1" classification="android">
<book available="20" id="1">
<title>瘋狂Android講義<span class="hljs-name"title>
<author id="1">李剛<span class="hljs-name"author>
<span class="hljs-name"book>
<book available="14" id="2">
<title>第一行代碼<span class="hljs-name"title>
<author id="2">郭林<span class="hljs-name"author>
<span class="hljs-name"book>
<book available="13" id="3">
<title>Android開發(fā)藝術(shù)探索<span class="hljs-name"title>
<author id="3">任玉剛<span class="hljs-name"author>
<span class="hljs-name"book>
<book available="5" id="4">
<title>Android源碼設(shè)計(jì)模式<span class="hljs-name"title>
<author id="4">何紅輝<span class="hljs-name"author>
<span class="hljs-name"book>
<span class="hljs-name"books>
<books id="2" classification="web">
<book available="10" id="1">
<title>Vue從入門到精通<span class="hljs-name"title>
<author id="4">李剛<span class="hljs-name"author>
<span class="hljs-name"book>
<span class="hljs-name"books>
<span class="hljs-name"value>
<span class="hljs-name"response>
'''
//開始解析:XmlSlurper
def xmlSluper = new XmlSlurper()
def response = xmlSluper.parseText(xml)
println response.value.books[0].book[0].title
println response.value.books[1].book[0].@available
//xml遍歷:遍歷所有的李剛的書名
def list = []
response.value.books.each { books->
books.book.each { book ->
if(book.author == '李剛'){
list.add(book.title)
}
}
}
println list.toListString()
打印結(jié)果:
[瘋狂Android講義, Vue從入門到精通]
這里我們找到所有的李剛的書名
- 8.2:
xml節(jié)點(diǎn)遍歷
深度遍歷
:遍歷所有的李剛的書名
def depFirst = response.depthFirst().findAll { book ->
return book.author.text() == '李剛' ? true : false
}.collect { book ->
book.title
}
println depFirst.toListString()
打印結(jié)果:[瘋狂Android講義, Vue從入門到精通]
廣度遍歷
def name1 = response.value.books.children().findAll { node ->
node.name() =='book' && node.@id == '2'‘
}.collect { node ->
node.title
}
println name1
打印結(jié)果:[第一行代碼]
- 8.3:
groovy中如何創(chuàng)建一個(gè)xml
:使用MarkupBuilder
需求:生成xml格式數(shù)據(jù)
/**
* 生成xml格式數(shù)據(jù)
*
*/
//根據(jù)類動(dòng)態(tài)生成xml文件
StringWriter sw = new StringWriter()
MarkupBuilder mb = new MarkupBuilder(sw)
Langs langs = new Langs(
type: 'current',count:3,mainstream:true,
languages: [
new Language(flavor: 'static',version:'1.5',value: 'Java'),
new Language(flavor: 'dynamic',version:'1.6.0',value: 'Groovy'),
new Language(flavor: 'dynamic',version:'1.9',value: 'JavaScript')
]
)
mb.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.toString()
saveFile(sw.toString(),'../../release.xml')
def saveFile(String source,String desFilePath){
try {
File desFile = new File(desFilePath)
if(!desFile.exists()){
desFile.createNewFile()
}
desFile.withWriter {
it.write(source)
}
return true
}catch(Exception e){
return false
}
}
class Langs {
String type
int count
boolean mainstream
def languages = []
}
class Language {
String flavor
String version
String value
}
查看文件release.xml
9.Groovy實(shí)戰(zhàn):
下面我用一個(gè)Groovy實(shí)戰(zhàn)項(xiàng)目來總結(jié)前面所講的內(nèi)容:
項(xiàng)目需求:從網(wǎng)絡(luò)上獲取當(dāng)前版本信息,然后使用groovy腳本將獲取到的版本信息寫入到本地文件中
gradle項(xiàng)目實(shí)戰(zhàn)1.png
- 3.
添加OkHttp網(wǎng)絡(luò)請(qǐng)求庫(kù)
這里我們?yōu)榱朔奖?,使用了我們android中常用的網(wǎng)絡(luò)請(qǐng)求庫(kù)OkHttp
okhttp.png
- 4.
完整代碼
如下:
package var
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import groovy.xml.MarkupBuilder
import okhttp3.OkHttpClient
import okhttp3.Request
/**
* 生成xml格式數(shù)據(jù)
*
*/
//本地PC:url地址
def url = 'http://127.0.0.1/api/v3/apiTest/getTestJson'
OkHttpClient client = new OkHttpClient()
Request request = new Request.Builder()
.url(url)
.get()
.build()
//1.獲取response
def res = client.newCall(request).execute()
def resStr = new String(res.body().bytes())
//2.使用JsonSlurper將jsonstr轉(zhuǎn)換為Object類對(duì)象
JsonSlurper js = new JsonSlurper()
Langs langs = js.parseText(resStr)
//Langs langs = js.parseText(resJson)
//3.將Object轉(zhuǎn)換為xml格式字符串:MarkupBuilder
StringWriter sw = new StringWriter()
MarkupBuilder mb = new MarkupBuilder(sw)
mb.langs(type: langs.type,count:langs.count,mainstream:langs.mainstream){
langs.languages.each { _lang ->
language(flavor:_lang.flavor,version:_lang.version,_lang.value)
}
}
//4.將xml數(shù)據(jù)寫入文件
saveFile(sw.toString(),'../../release.xml')
/**
* 寫入文件操作
* */
def saveFile(String source,String desFilePath){
try {
File desFile = new File(desFilePath)
if(!desFile.exists()){
desFile.createNewFile()
}
desFile.withWriter {
it.write(source)
}
return true
}catch(Exception e){
return false
}
}
//json實(shí)體對(duì)象
class Langs {
String type
int count
boolean mainstream
def languages = []
}
class Language {
String flavor
String version
String value
}
這里結(jié)合我們前面講解的關(guān)于文件操作,xml和json等數(shù)據(jù)格式操作,從網(wǎng)絡(luò)上讀取json數(shù)據(jù),寫入xml格式到我們本地項(xiàng)目的路徑,大家可以根據(jù)我們前面所講自己去實(shí)現(xiàn)一個(gè)類似的邏輯,多動(dòng)手,相信你對(duì)groovy會(huì)有更深的理解。
總結(jié):
本篇主要講解了我們使用groovy
語言的基本用法,因?yàn)橐彩腔?code>jvm的語言,對(duì)于有java
基礎(chǔ)的同學(xué)學(xué)起來應(yīng)該會(huì)很輕松
后面會(huì)繼續(xù)講解其他關(guān)于Gradle
的關(guān)鍵知識(shí),敬請(qǐng)期待。。
-
JAVA
+關(guān)注
關(guān)注
19文章
2973瀏覽量
104932 -
XML
+關(guān)注
關(guān)注
0文章
188瀏覽量
33107
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論