データをScala XMLによってHTMLタグ化する

Posted 2010年11月22日 by

HTMLタグを生成するのに、Stringクラスではなく、ScalaのXMLクラスを使って行う方法を試してみる。

Queueクラス生成の記述がNewで書くとエラーとなってしまった。
Queue.empty[Node]と書くのが正しい。

XMLの出力で適当に改行を入れたいのでノードの記述で改行してみた。

package SeeDo
import scala.collection.immutable._
import scala.xml._ 
import scala.xml.transform.{RewriteRule, RuleTransformer}

class GenHtml {
	var tableElem = Queue.empty[Any] // テーブル化する要素を格納
	// TABLEタグ化
	def tagTable(idName:String):Node = {
//		var nodes = new Queue[Node]
		var nodes  = Queue.empty[Node]
		tableElem.foreach{(e) =>
			val ret = e match{
			//配列なら1行分として
	        case e:Array[String]  => nodes += addTdElem(e);
	        // 文字なら1文字1行分として
	        case e:String => nodes += <tr><td>{e}</td>
</tr>;
	        case _ => nodes += <tr><td/></tr> // 空行として
			}
		}
<TABLE id={idName}>{nodes}
</TABLE>
	}
	// 文字を1行分として
	def addTableElem(eml:String):Any = {
		 tableElem += eml
		 tableElem
	}
	// 配列なら要素を1行分として
	def addTableElem(eml:Array[String]):Any = {
		tableElem += eml
		tableElem
	}
	// <TR><TD>..</TD>...</TR>化
	def addTdElem(eml:Array[String]):Node = {
		var nodes  = Queue.empty[Node]
		eml.foreach{(x) => nodes += <td>{x}</td>}
<tr>{nodes}</tr>
	}
}




このプログラムをテストするためのコードがこれです。

X藤さんは1行ずつにして、Y田さんは5名を一行にしてタグを付ける。

package SeeDo

object TestGenHtml {
  def main(args : Array[String]) : Unit = {
	  val html = new GenHtml
	  val emp = Array ("加藤","安藤","斉藤","伊藤","後藤")
	  val emp2 = Array ("大田","伊与田","水田","神田","杉田")
	  //従業員1名を1行
	  emp.foreach{(ename) =>
	  	html.addTableElem(ename)
	  }
	  //従業員複数を1行
	  html.addTableElem(emp2)
	  //TABLEタグ化
	  println(html.tagTable("blue"))
  }
}



実行すると以下のようにデータがTABLEタグ化されて出力されます。

<TABLE id="blue"><tr><td>加藤</td>
</tr><tr><td>安藤</td>
</tr><tr><td>斉藤</td>
</tr><tr><td>伊藤</td>
</tr><tr><td>後藤</td>
</tr><tr><td>大田</td><td>伊与田</td><td>水田</td><td>神田</td><td>杉田</td></tr>
</TABLE>

はじめて、XMLクラスを使ってプログラムを書いてみましたが、もっといい書き方があるような気がします。

余白

Scalaコードの中にWEBページ用にHTMLタグをそのままテンプレートとして記述して、ScalaのXMLクラスでHTMLタグを処理してページを生成するということを考えてみたのですが、HTMLはWebデザイナが作る方がやっぱりよくて、Scalaプログラマーが管理するものではないと思う次第です。だからといって、StrutsのようにTaglib化するのも隠ぺいしすぎているように思えるし。そうなると、デザイナが作ったページデザインとScalaのコードはどうやってマージするのがいいのでしょう。難しい問題です。

Post Details

  • Post Title: データをScala XMLによってHTMLタグ化する
  • Author: admin
  • Filed As: Scala
  • Tags:
  • You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

コメントを残す