スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GroovyでVelocity

テンプレートエンジンのApache Velocityを使ったGroovyのサンプルです。
data.xmlにあるデータを読み込んで、result.htmlを作成します。
■データ(data.xml)

<?xml version="1.0" encoding="UTF-8"?>
<data>
<param name="data2">予定表??ハンカク</param>
<param name="data4">予定表??ハンカク</param>
</data>

■テンプレートファイル(template.vm)

<html>
<body>
予定表??ハンカク
${data2}
${data3}
${data4}
</body>
</html>

■ソース(velocity.groovy)

import org.apache.velocity.app.Velocity
import org.apache.velocity.VelocityContext
import org.apache.velocity.Template
import java.io.OutputStreamWriter
import java.io.FileOutputStream
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.xpath.XPathFactory
import javax.xml.xpath.XPathConstants

document= DocumentBuilderFactory
.newInstance()
.newDocumentBuilder()
.parse(new File("data.xml"))
xpath = XPathFactory.newInstance().newXPath()
nodes = xpath.evaluate("//param", document.getDocumentElement(), XPathConstants.NODESET)

Velocity.init()
VelocityContext context = new VelocityContext();
context.put("data3", "予定表??ハンカク")
nodes.each() {
map = it.getAttributes()
item = map.getNamedItem("name")
context.put(item.getValue(), it.getTextContent())
}

Template template = Velocity.getTemplate("template.vm", "UTF-8")
fw = new OutputStreamWriter(new FileOutputStream("result.html"),"UTF-8")
template.merge(context,fw)
fw.flush()
fw.close()

■結果(result.html)

<html>
<body>
予定表??ハンカク
予定表??ハンカク
予定表??ハンカク
予定表??ハンカク
</body>
</html>

今回のサンプルではXMLを使ってデータを読み込んでいますが、以前紹介したGroovyでDBアクセスを使えば、DBからも簡単に組み込めます。

Velocityは、テンプレートファイルで細かい制御ができるのでソース生成によく使っています。
ただ、テンプレート内のコマンドが最低限しか無いのが、ちょっとめんどくさいところもあります。

一行入魂サイトにまとめがあります。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。