Загрузка, изменение и запись XML-документа в Groovy - PullRequest
19 голосов
/ 11 февраля 2010

У меня есть XML-документ, который я хочу загрузить из файла, изменить несколько определенных элементов и затем записать обратно на диск.

Я не могу найти примеры того, как это сделать в Groovy.

Ответы [ 4 ]

38 голосов
/ 12 февраля 2010

Вы можете просто изменить свойство value узла, чтобы изменить значения элементов.

/* 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>
*/
5 голосов
/ 22 октября 2014

Если вы хотите использовать 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.

Ссылки:

1 голос
/ 11 февраля 2010

Существует довольно исчерпывающий набор примеров для чтения / записи XML с использованием Groovy здесь . Что касается загрузки / сохранения данных в / из файла, различные методы / свойства, которые Groovy добавляет к java.io.File, должны обеспечивать необходимую функциональность. Примеры включают в себя:

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

См. здесь для полного списка этих методов / свойств.

0 голосов
/ 16 января 2019

Для того, кто находит вывод пустым, вот решение:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...