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

Mik*_*ler 19 xml groovy

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

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

Joh*_*ner 38

您只需修改节点的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>
*/
Run Code Online (Sandbox Code Playgroud)

  • 这有效但会弄乱文件中的格式并删除所有注释.这是保留格式和注释的替代方法:/sf/ask/1448336851/#answer-20720694 (3认同)
  • 您还可以通过简单地将`new XmlNodePrinter(new PrintWriter(new FileWriter(xmlFile)))`拉入变量`nodePrinter`并在调用`print(xml)之前设置`nodePrinter.preserveWhitespace = true`来保留格式. (3认同)
  • 对我来说输出文件是空的 (2认同)

Hei*_*ter 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)
Run Code Online (Sandbox Code Playgroud)

注意: XmlUtil也可以与XmlParser@John Wagenleitner的示例中的一起使用。

参考文献: