traverse gpathresult example xml groovy

gpathresult - Cargar, modificar y escribir un documento XML en Groovy



groovy gpathresult example (4)

Hay un conjunto bastante exhaustivo de ejemplos para leer / escribir XML usando Groovy here . Con respecto a la carga / guardado de los datos en / desde un archivo, los diversos métodos / propiedades que Groovy agrega a java.io.File , deben proporcionar la funcionalidad que necesita. Ejemplos incluyen:

File.write(text) File.text File.withWriter(Closure closure)

Vea here para una lista completa de estos métodos / propiedades.

Tengo un documento XML que quiero cargar desde un archivo, modificar algunos elementos específicos y luego volver a escribir en el disco.

No puedo encontrar ningún ejemplo de cómo hacer esto en Groovy.


Para quien encuentra la salida vacía, aquí está la solución:

def xml = file("${projectDir}/src/main/AndroidManifest.xml") def manifest = new XmlSlurper().parse(file(xml)) manifest.@package = "com.newapp.id" xml.withWriter {out-> XmlUtil.serialize(manifest, out) }


Si quieres usar el XmlSlurper :

//Open file def xml = new XmlSlurper().parse(''/tmp/file.xml'') //Edit File e.g. append an element called foo with attribute bar xml.appendNode { foo(bar: "bar value") } //Save File def writer = new FileWriter(''/tmp/file.xml'') //Option 1: Write XML all on one line def builder = new StreamingMarkupBuilder() writer << builder.bind { mkp.yield xml } //Option 2: Pretty print XML XmlUtil.serialize(xml, writer)

Nota: XmlUtil también se puede usar con XmlParser como se usa en el ejemplo de @John Wagenleitner.

Referencias:


Simplemente puede modificar la propiedad de valor del nodo para modificar los valores de los elementos.

/* input: <root> <foo> <bar id="test"> test </bar> <baz id="test"> test </baz> </foo> </root> */ def xmlFile = "/tmp/test.xml" def xml = new XmlParser().parse(xmlFile) xml.foo[0].each { it.@id = "test2" it.value = "test2" } new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile))).print(xml) /* output: <root> <foo> <bar id="test2"> test2 </bar> <baz id="test2"> test2 </baz> </foo> </root> */