Je souhaite charger un document XML à partir d'un fichier, modifier quelques éléments spécifiques, puis réécrire sur le disque.
Je ne trouve aucun exemple de la manière de procéder dans Groovy.
Vous pouvez simplement modifier la propriété value du nœud pour modifier les valeurs des éléments.
/* 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>
*/
Si vous voulez utiliser le 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)
Remarque: XmlUtil
peut également être utilisé avec XmlParser
comme dans l'exemple de @John Wagenleitner.
Références:
Il existe un ensemble assez exhaustif d’exemples pour lire/écrire du XML avec Groovy ici . En ce qui concerne le chargement/l'enregistrement des données dans/à partir d'un fichier, les différentes méthodes/propriétés ajoutées par Groovy à Java.io.File
devraient fournir les fonctionnalités dont vous avez besoin. Les exemples comprennent:
File.write(text)
File.text
File.withWriter(Closure closure)
Voir ici pour une liste complète de ces méthodes/propriétés.
Pour ceux qui trouvent la sortie vide, voici la solution:
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)
}