ゲンゾウ用ポストイット

Java、Groovy、Linux関連の備忘録

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

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

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

広告を非表示にする