scalaでXMLタグの置換を行う

Posted 2011年7月7日 by

スマートフォン向けに会話形式の入力フォームを開発するためにscalaでプログラムを書き始めました。XMLで会話内容を定義して会話画面を作る仕様です。

ブラウザにAjaxにてXMLで定義した会話データを送信するめに、
XMLの特定のタグを置換しようと、scala標準ライブラリのRewriteRuleとRuleTransformerを使ってプログラムを書いてみた。

Blog「devneko is not cat.」のコードを参考にしてRewriteRuleに置換ルールをクラスを定義し、RuleTransformerでRewriteRuleに基づいて置換処理するもの。

package sc
import scala.xml._
import scala.xml.transform._

class ReplacementTagRewriteRule(x:String) extends RewriteRule {
	override def transform(node:Node): Seq[Node] = node match {
		case e @ Elem(_,"msg",_,_,_*) =>  <msg>{x}</msg>
		case other => other
	}
}

置換したいXMLは、<msg>タグの内容を <retmsg>タグの内容に置換したXMLを生成します。

package sc
import scala.xml._
import scala.xml.transform._
object testSA {
  def main(args: Array[String]): Unit = {
    val defXml = <question id="START">
			<msg>あなたのことを知りたいの</msg>
			<choise>
				<item result="yes" value="いいよ"/>
				<item result="no" value="教えない"/>
				<item result="why" value="どうして?"/>
			</choise>
			<ans hantei="match">
				<select result="yes" next="2">はい,いいよ,OK,YES</select>
				<select result="no" next="exit">教えない,いや,いいえ,NG,NO</select>
				<select result="other" next="again">
					<retmsg>「はい」か「いいえ」で答えてください。</retmsg>
				</select>
				<select result="why" next="again">どうして?
					<retmsg>プレゼントを送りたいから</retmsg>
				</select>
			</ans>
		</question>
    	val retmsg = defXml \ "ans" \ "select" \ "retmsg"
    	var message:String = null
    	for(msg <- retmsg){message = msg.text}
    	var node = new RuleTransformer(new ReplacementTagRewriteRule(message))(defXml)
    	println(node)
  }
}

実行すると、<msg>タグの内容が「プレゼントを送りたいから」に置換されます。

 <question id="START">
			<msg>;プレゼントを送りたいから</msg>
			<choise>
				<item result="yes" value="いいよ"/>
				<item result="no" value="教えない"/>
				<item result="why" value="どうして?"/>
			</choise>
			<ans hantei="match">
				<select result="yes" next="2">はい,いいよ,OK,YES</select>
				<select result="no" next="exit">教えない,いや,いいえ,NG,NO</select>
				<select result="other" next="again">
					<retmsg>「はい」か「いいえ」で答えてください。</retmsg>
				</select>
				<select result="why" next="again">どうして?
					<retmsg>プレゼントを送りたいから</retmsg>
				</select>
			</ans>
		</question>

Post Details

  • Post Title: scalaでXMLタグの置換を行う
  • 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.

コメントを残す