Question

I have a gradle.build where I am trying to:

  1. read an XML file
  2. use XmlSlurper to update an attribute in the read XML file
  3. write the updated XML back to the originally parsed xml file.

The third step only works if I write the modified XML to a new non-existing XML file, but not the originally parsed XML file.

What is the simplest way to write the modified XML to the originally parsed XML file?


My code so far:

def inFile = file('file.xml')
def outFile = file('_file.xml')

def xml = new XmlSlurper().parse(inFile)

// update xml code here

def outBuilder = new StreamingMarkupBuilder()
def outWriter = outFile.newWriter()
XmlUtil.serialize(outBuilder.bind{ mkp.yield xml }, outWriter)

I would like outFile to be file.xml so that it overwrites the original XML file.

Was it helpful?

Solution

What happens if you do:

def inFile = file( 'file.xml' )
def xml = new XmlSlurper().parse( inFile )

xml.appendNode {
    haha( 'tim_yates' )
}

inFile.withWriter { outWriter ->
    XmlUtil.serialize( new StreamingMarkupBuilder().bind{ mkp.yield xml }, outWriter )
}

Is it just not written? (seems to work for me)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top