(移設) GroovyでXML
わけあってGroovyでXMLをパースすることになったのでお勉強。
以下のXMLとGroovyファイルを同じディレクトリに置いて以下コマンド実行
>Groovy XmlTest 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