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>