Groovy中對xml的操作補充
阿新 • • 發佈:2019-01-10
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
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
// 宣告名稱空間 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值