在Groovy中加载,修改和编写XML文档

时间:2010-02-11 15:51:21

标签: xml groovy

我有一个XML文档,我想从文件加载,修改一些特定的元素,然后写回磁盘。

我在Groovy中找不到任何如何执行此操作的示例。

4 个答案:

答案 0 :(得分:38)

您只需修改节点的属性即可修改元素的值。

/* 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>
*/

答案 1 :(得分:5)

如果您想使用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也可以与@John Wagenleitner的示例中使用的XmlParser一起使用。

参考文献:

答案 2 :(得分:1)

使用Groovy here读取/编写XML有一套非常详尽的示例。关于向/从文件加载/保存数据,Groovy添加到java.io.File的各种方法/属性应该提供您需要的功能。例子包括:

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

有关这些方法/属性的完整列表,请参阅here

答案 3 :(得分:0)

对于那些发现输出为空的人,下面是解决方法:

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)
}