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)
在你的代码中:是吗......?节点名称和属性在哪里..?
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)
| 归档时间: |
|
| 查看次数: |
2116 次 |
| 最近记录: |