Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing xml file at build time and modify its values/content

I want to parse a xml file during build time in build.gradle file and want to modify some values of xml, i follow this SO question and answer Load, modify, and write an XML document in Groovy but not able to get any change in my xml file. can anyone help me out. Thanks

code in 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)
}

xml file :

<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>
like image 205
Kapil Rajput Avatar asked Dec 31 '25 13:12

Kapil Rajput


1 Answers

In your code : Is it right ...? Where is node name and attribute ..?

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
}

You tried to read and write a same file. Try this code which replaces the exact node of the xml file. XmlSlurper provides this facility.

Updated :

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)
like image 108
Bhanuchander Udhayakumar Avatar answered Jan 06 '26 12:01

Bhanuchander Udhayakumar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!