在构建时解析 xml 文件并修改其值/内容

Kap*_*put 2 groovy xml-parsing build.gradle android-gradle-plugin

我想在文件中的构建期间解析 xml 文件build.gradle,并想要修改 xml 的某些值,我遵循这个 SO 问题和答案在 Groovy 中加载、修改和编写 XML 文档,但无法在我的 xml 文件中进行任何更改。谁能帮我吗。谢谢

代码build.gradle

def overrideLocalyticsValues(String token) {
def xmlFile = "/path_to_file_saved_in_values/file.xml"
def locXml = new XmlParser().parse(xmlFile)

locXml.resources[0].each {
    it.@ll_app_key = "ll_app_key"
    it.value = "123456"
}
XmlNodePrinter nodePrinter = new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile)))
nodePrinter.preserveWhitespace = true
nodePrinter.print(locXml)
}
Run Code Online (Sandbox Code Playgroud)

xml文件:

<resources>
<string name="ll_app_key" translatable="false">MY_APP_KEY</string>
<string name="ll_gcm_sender_id" translatable="false">MY_GCM_SENDER_ID</string>
</resources>
Run Code Online (Sandbox Code Playgroud)

Bha*_*mar 5

在你的代码中:是吗......?节点名称和属性在哪里..?

locXml.resources[0].each {    // Wrongly entered without node name 
    it.@ll_app_key = "ll_app_key"   // Attribute name @name
    it.value = "123456"           // you can't change or load values here
}
Run Code Online (Sandbox Code Playgroud)

您尝试读取和写入同一个文件。尝试使用此代码替换 xml 文件的确切节点。XmlSlurper提供此便利。

更新 :

import groovy.util.XmlSlurper
import groovy.xml.XmlUtil

def xmlFile = "test.xml"
def locXml = new XmlSlurper().parse(xmlFile)


locXml.'**'.findAll{ if (it.name() == 'string' && it.@name == "ll_app_key") it.replaceBody 12345 }

new File (xmlFile).text = XmlUtil.serialize(locXml)
Run Code Online (Sandbox Code Playgroud)