XmlSlurperで取得したノードをxmlとして出力する

Groovy

google:XmlSlurperでノードを取得した場合、GPathResultというクラスのインスタンスが取得される。
google:NodeChildというインターフェイスを実装していることから分かるとおり、xmlのノードを表している。

取得したノードのxml構造を見たいときは以下のように出力してやるとかなりおかしな出力の仕方がされる。

test.xml

<users>
<user name="genzou">
<family>yu</family>
<family>ki</family>
</user>
<user name="yasu">
<family>megumi</family>
</user>
<user name="taro">
<family>hanako</family>
<family>shinji</family>
</user>
</users>

test.groovy

#!/usr/bin/env groovy
import java.text.*
def users = new XmlSlurper(false,false).parseText(new File( "test.xml" ).text)
def user = users*.user
println user[0]
genzou@genzou-desktop:~/$ ./test.groovy
yukimegumihanakoshinji

どうやらテキストノードを保持するすべての子ノードをたどり、GPathResult#text()メソッドを呼び出しているようだ。
この場合、以下のように記述するのが正しい。

test.groovy(新)

#!/usr/bin/env groovy
import java.text.*
def users = new XmlSlurper(false,false).parseText(new File( "test.xml" ).text)
def user = users*.user
println groovy.xml.XmlUtil.serialize(user[0]).toString()

出力される情報は一行になっているため、必要があれば自分で綺麗に整形・インデントしなければならないが。

Groovy

Posted by genzouw