精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Gradle入門知識之Gradle語法3

jf_78858299 ? 來源:小余的自習室 ? 作者:小余的自習室 ? 2023-03-30 11:04 ? 次閱讀

8.XML

java中處理xml:使用的一般是dom文檔驅動處理或者sax事件驅動處理

groovy處理xml

  • 8.1: groovy中如何解析xml

    使用XmlSlurper進行解析

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開發藝術探索<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源碼設計模式<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()

打印結果:
[瘋狂Android講義, Vue從入門到精通]
這里我們找到所有的李剛的書名
  • 8.2:xml節點遍歷

深度遍歷:遍歷所有的李剛的書名

def depFirst = response.depthFirst().findAll { book ->
    return book.author.text() == '李剛' ? true : false
}.collect { book ->
    book.title
}
println depFirst.toListString()

打印結果:[瘋狂Android講義, Vue從入門到精通]

廣度遍歷

def name1 = response.value.books.children().findAll { node ->
    node.name() =='book' && node.@id == '2'‘
}.collect { node ->
    node.title
}
println name1
打印結果:[第一行代碼]
  • 8.3:groovy中如何創建一個xml:使用MarkupBuilder

需求:生成xml格式數據

/**
 * 生成xml格式數據
 * 
 */
 //根據類動態生成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實戰:

下面我用一個Groovy實戰項目來總結前面所講的內容:

項目需求:從網絡上獲取當前版本信息,然后使用groovy腳本將獲取到的版本信息寫入到本地文件中

  • 1.groovy環境搭建

    下載最新版本的Intellij IDEA:筆者使用的版本:20220103版本

  • 2.創建groovy工程

gradle項目實戰1.png

  • 3.添加OkHttp網絡請求庫

這里我們為了方便,使用了我們android中常用的網絡請求庫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格式數據
 * 
 */

//本地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轉換為Object類對象
JsonSlurper js = new JsonSlurper()
Langs langs = js.parseText(resStr)
//Langs langs = js.parseText(resJson)
//3.將Object轉換為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數據寫入文件
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實體對象
class Langs {
    String type
    int count
    boolean mainstream
    def languages = []
}
class Language {
    String flavor
    String version
    String value
}

這里結合我們前面講解的關于文件操作,xml和json等數據格式操作,從網絡上讀取json數據,寫入xml格式到我們本地項目的路徑,大家可以根據我們前面所講自己去實現一個類似的邏輯,多動手,相信你對groovy會有更深的理解。

總結:

本篇主要講解了我們使用groovy語言的基本用法,因為也是基于jvm的語言,對于有java基礎的同學學起來應該會很輕松

后面會繼續講解其他關于Gradle的關鍵知識,敬請期待。。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2960

    瀏覽量

    104565
  • XML
    XML
    +關注

    關注

    0

    文章

    188

    瀏覽量

    33047
收藏 人收藏

    評論

    相關推薦

    Gradle版本目錄功能的簡單應用

    版本帝 Gradle 最新版本已經到了 8.1.1 ,你是不是還在用著 Gradle 3 的功能?今天我們了解一下 Gradle 7.0 之后推出的新功能 Version Catalo
    的頭像 發表于 09-30 11:12 ?1287次閱讀

    gradle安裝與配置unity

    Gradle是一種用于構建和自動化構建過程的強大工具,而Unity則是一款跨平臺的游戲引擎。在Unity項目中使用Gradle可以幫助我們更方便地管理和構建項目,同時能夠提供更高的自定義能力和穩定性
    的頭像 發表于 12-07 14:48 ?2028次閱讀

    Android Studio與Gradle深入

    小語言規范用來處理一個特定的事情(大多情況下是配置)。Android 的插件的 DSL 文檔在 Android Gradle DSL有說明。  理解了以上基礎之后,你就會知其然,知其所以然了。  以上知識
    發表于 08-31 17:58

    Gradle for Android

    Gradle for Android
    發表于 07-16 15:50

    請問OpenHarmony鴻蒙demo gradle報錯怎么解決?

    [build_d4wwgdfsrmyu3wivei5s3deyo$_run_closure1@1db3e190] on root project 'HarmonyAPP' of type org.gradle.api.Proj
    發表于 04-01 11:27

    快速入門Gradle的方法

    我們前面的Gradle是一門基于Groov的DSL,可能很多童鞋就是因為你是這個Gradle的迷,第一覺得Gradle是一門獨立的語言呀,如果想進入歧途了,我一開始也是這么迷糊的,當你了解之后,你就可以這么理解
    的頭像 發表于 04-08 10:56 ?1283次閱讀
    快速<b class='flag-5'>入門</b><b class='flag-5'>Gradle</b>的方法

    Gradle入門知識Gradle詳解

    大家回想一下自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發現有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發表于 03-30 10:47 ?2499次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b>詳解

    Gradle入門知識Gradle詳解(下)

    大家回想一下自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發現有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發表于 03-30 10:51 ?829次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b>詳解(下)

    Gradle入門知識Gradle語法1

    很多開發喜歡把`Gradle`簡單定義為一種構建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構建,但是如果簡單得把Gradle拿來做構建,就太小看Gradle
    的頭像 發表于 03-30 10:54 ?980次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b><b class='flag-5'>語法</b>1

    Gradle入門知識Gradle語法2

    很多開發喜歡把`Gradle`簡單定義為一種構建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構建,但是如果簡單得把Gradle拿來做構建,就太小看Gradle
    的頭像 發表于 03-30 10:54 ?717次閱讀

    Gradle入門知識Gradle api解析(上)

    由于Project源碼篇幅太長:這里只列出類的部分方法和屬性: 我們前面分析過,每個build.gradle對應一個Project,Project在初始過程中會被構建為`樹`形結構:
    的頭像 發表于 03-30 11:01 ?2311次閱讀
    <b class='flag-5'>Gradle</b><b class='flag-5'>入門</b><b class='flag-5'>知識</b><b class='flag-5'>之</b><b class='flag-5'>Gradle</b> api解析(上)

    Gradle入門知識Gradle api解析(下)

    由于Project源碼篇幅太長:這里只列出類的部分方法和屬性: 我們前面分析過,每個build.gradle對應一個Project,Project在初始過程中會被構建為`樹`形結構:
    的頭像 發表于 03-30 11:05 ?1033次閱讀

    Gradle Plugin和AGP的區別1

    Gradle Plugin`和`AGP`的區別? `Gradle Plugin`是`Gradle`構建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發表于 03-30 11:48 ?1193次閱讀
    <b class='flag-5'>Gradle</b> Plugin和AGP的區別1

    Gradle Plugin和AGP的區別2

    Gradle Plugin`和`AGP`的區別? `Gradle Plugin`是`Gradle`構建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發表于 03-30 11:49 ?1137次閱讀

    Gradle Plugin和AGP的區別3

    Gradle Plugin`和`AGP`的區別? `Gradle Plugin`是`Gradle`構建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發表于 03-30 11:50 ?1227次閱讀