1. 程式人生 > >Groovy中對xml的操作補充

Groovy中對xml的操作補充

Android中Gradle編譯器使用的是Groovy語言,Groovy為我們提供了一系列的工具類用於處理xml檔案。

在此,補充一些文件中遺漏的點:

1.一些Groovy中的xml工具類找不到

可以嘗試
import groovy.xml.*
類似於Namespace、QName以及XmlUtil工具類,均在groovy.xml包中

2.關於namespace的問題

xml中namespace(名稱空間)為的是提供避免元素命名衝突的方法,但卻讓我們訪問xml文件變得十分不方便 在Groovy中,我們常用的xml解析器有XmlSlurper以及XmlPraser,他們的具體用法可以參考上面連結中的介紹,下面分別來講講兩種解析器如何解析帶名稱空間的xml檔案

XmlSlurper

XmlSlurper比較簡單,在解析xml檔案的同時宣告名稱空間即可:
    def testManifest = new XmlSlurper().parse("${WORKSPACE}${SRC_DIR}/AndroidManifest.xml")
    testManifest.declareNamespace('android':'http://schemas.android.com/apk/res/android')
    println testManifest.application[0][email protected]"android:name"
上面程式碼是訪問AndroidManifest檔案中Application元素下的android:name屬性的示例

XmlParser

XmlParser則比較麻煩,我們需要先宣告一個Namespace物件,然後再使用attribute方法獲取元素屬性(目前找不到別的寫法……)
    // 宣告名稱空間
    def android = new Namespace('http://schemas.android.com/apk/res/android', 'android')

    // 獲取apk application name
    def parser = new XmlParser()
    def srcManifest = parser.parse("${WORKSPACE}${SRC_DIR}/AndroidManifest.xml")
    def srcApp = srcManifest.application[0].attribute(android.name)

3.關於動態修改xml中元素的屬性

在上面連結中,我們學會了通過xmlParser修改xml的元素屬性,在此我們再補充一種修改元素屬性的方法 由於xml中元素屬性載入記憶體後其實是存在Map中的,因此我們可以通過attributes方法獲取Map,並使用put方法修改對應屬性:
srcManifest.application[0].attributes().put(android.name, value)
上面程式碼是把AndroidManifest檔案中Application元素的android:name屬性改為value值