У меня есть документ XML, который я хочу загрузить из файла, изменить несколько конкретных элементов, а затем записать обратно на диск.
Я не могу найти примеры того, как это сделать в Groovy.
У меня есть документ XML, который я хочу загрузить из файла, изменить несколько конкретных элементов, а затем записать обратно на диск.
Я не могу найти примеры того, как это сделать в Groovy.
Вы можете просто изменить свойство node значение, чтобы изменить значения элементов.
/* 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 {
[email protected] = "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>
*/
Если вы хотите использовать 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)
Примечание:
XmlUtil
также можно использовать с XmlParser
, как это используется в примере @John Wagenleitner.
Литература:
Там довольно исчерпывающий набор примеров для чтения/записи XML с помощью Groovy здесь. Что касается загрузки/сохранения данных в/из файла, различные методы/свойства, которые Groovy добавляет к java.io.File
, должны предоставить необходимую вам функциональность. Примеры включают:
File.write(text)
File.text
File.withWriter(Closure closure)
См. здесь для полного списка этих методов/свойств.
Для того, кто находит вывод пустым, вот решение:
def xml = file("${projectDir}/src/main/AndroidManifest.xml")
def manifest = new XmlSlurper().parse(file(xml))
[email protected] = "com.newapp.id"
xml.withWriter {out->
XmlUtil.serialize(manifest, out)
}