Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Writing updated XML to originally parsed file

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.

like image 721
Going Bananas Avatar asked Aug 22 '13 15:08

Going Bananas


1 Answers

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)

like image 129
tim_yates Avatar answered Sep 22 '22 02:09

tim_yates