Groovy — изменить значение XML-файла

#java #android #gradle #groovy #scripting

#java #Android #gradle #groovy #сценарии

Вопрос:

У меня есть XML-файл, и я вставляю свой XML-файл ниже. Я хочу изменить значение splash_color с помощью скрипта groovy. Я попытался проанализировать его, но не смог добиться успеха. XML

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="splash_color">#D3B61A</color>
</resources>
  

Заводной код:

 def xmlFile = "$androidWorkingDirPath/app/src/main/res/values/colors.xml"
    def xml = new XmlParser().parse(xmlFile)
    xml.color[0].each {
        //it.@name = "test2"
        //it.value = "test2"
        println("it.value=$it.value")
        println("it.value=$it.value.name")
    }
    new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile))).println("Xmlvalue=$xml")
  

Ответ №1:

Работает следующее.

 def xmlFile = '''<?xml version="1.0" encoding="UTF-8"?>
<resources>
    <color name="splash_color">#D3B61A</color>
</resources>
'''
  

Вы можете использовать XmlUtil.serialize вместо new XmlNodePrinter(new PrintWriter(new FileWriter

 import groovy.xml.XmlUtil
  

Я использую parseText() , потому что в этом примере я не читаю из файла

 def resources = new XmlParser().parseText(xmlFile)
  

Вам не обязательно использовать [0] здесь, но если есть больше узлов с тем же именем, используйте findAll()

 resources.color.each { 
  

Используется ${} для интерполяции переменных в строках

     println "it.value=${it.value}" 
    println "it.name=${it.@name}"
}

println XmlUtil.serialize(resources)
  

Вы можете передать это в файл.

Для замены узла см. Это