(移設) GroovyでXML

わけあってGroovyでXMLをパースすることになったのでお勉強。
以下のXMLとGroovyファイルを同じディレクトリに置いて以下コマンド実行

>Groovy XmlTest sample-config.xml

パースするXML
sample-config.xml




my.yahoo.co.jp
My Yahoo
20
seitaro
password


mail.yahoo.co.jp
Mail Yahoo
30
seitaro
password

パースする為のコード
XmlTest.groovy

import groovy.util.XmlParser

class XmlTest {
static void main(args){
println args
taskPerser = new TaskXmlParser()
tasks = taskPerser.parse(args[0])
tasks.show()
}
}

class TaskXmlParser {

Tasks parse(xml) {
tasks = new Tasks()
xmlTree = new XmlParser().parse(xml)
xmlTree.Task.each { |Task|
taskData = new TaskData()
taskData.taskId = Task['@id']
taskData.url = Task.Url[0].text()
taskData.urlType = Task.Url['@type'][0]
taskData.serviceName = Task.ServiceName[0].text()
taskData.reroad = Task.Reroad[0].text()
taskData.reroadTime = Task.Reroad['@time'][0]
taskData.user = Task.User[0].text()
taskData.pass = Task.Pass[0].text()
tasks.addTask(taskData)
}
tasks
}
}

class TaskData {
taskId
url
urlType
serviceName
reroad
reroadTime
user
pass
}

class Tasks {
tasks = []

void addTask(taskData){
tasks << taskData
}

void show() {
tasks.each {|task|
println " ${task.taskId}"
println " = ${task.url}"
println " = ${task.urlType}"
println " = ${task.serviceName}"
println " = ${task.reroad}"
println " = ${task.reroadTime}"
println " = ${task.user}"
println " = ${task.pass}"
}
}
}

出力結果
[sample-config.xml]

0001
= my.yahoo.co.jp
= http
= My Yahoo
= 20
= SECOND
= seitaro
= password
0002
= mail.yahoo.co.jp
= http
= Mail Yahoo
= 30
= SECOND
= seitaro
= password