#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)
Вы можете передать это в файл.
Для замены узла см. Это