XmlSlurper を使った XML の加工

Groovy には XML を処理する手段がいろいろと用意されているが、今回は XmlSlurper を使った XML の加工(要素/属性の追加・削除)と出力を試してみる事に。

とりあえず、属性の追加や削除は以下で実現可。

  • 要素の追加: appendNode メソッドを使用
  • 属性の追加: @属性名 に値を設定
  • 要素の置換: replaceNode メソッドを使用
  • 要素の削除: replaceNode メソッドを使用(実装を空にする)

出力方法は分からなくて多少苦労したが、XML(groovy.util.slurpersupport.NodeChild オブジェクト)を StreamingMarkupBuilder を使って文字列化する事でとりあえず実現できた。

sample_xmlslurper.groovy
import groovy.xml.StreamingMarkupBuilder

def xml = "<root><a><value>123</value></a><b><value>test</value></b></root>"

//XMLのパース
def doc = new XmlSlurper().parseText(xml)

//c要素の追加
doc.appendNode {
    c("abc")
}

//b要素にid属性追加
doc.b.@id = "no1"

//要素の置換(b/value要素を置換)
doc.b.value.replaceNode { n ->
    item(type: "data") {
        value("test data")
    }
}

//a要素の削除
doc.a.replaceNode {}

def builder = new StreamingMarkupBuilder()
//XML文字列化
def xmlString = builder.bind{
    mkp.yield doc
}
println xmlString
実行結果
>groovy sample_xmlslurper.groovy
<root><b id='no1'><item type='data'><value>test data</value></item></b><c>abc</c></root>