xmlの式の適当バリデータ
scalaで書いたxmlの式のバリデータ。エラーの出し方が適当だけどもこんなかんじでバリデーションできます。
import scala.xml.Node import scala.xml.Utility import scala.xml.Text import scala.io.Source import scala.collection.mutable._ object xmlvalid { def validate(xml:Node) = { def exp(xml:Node) = { xml match { case <exp>{x}</exp> => expGroup(x) case _ => println("exp gahituyo"+xml);false } } def expGroup(xml:Seq[Node]):Boolean = { xml match { case Seq(<number>{Text(x)}</number>) => numberType(x) case Seq(<add>{x}{y}</add>) => expGroup(x) && expGroup(y) case Seq(<mul>{x}{y}</mul>) => expGroup(x) && expGroup(y) case _ => println("number or add or mul ga hitsuyo"); false } } def numberType(s:String):Boolean = { try { s.toInt } catch { case _ => println("number niha int ga hituyo error") ;return false } true } exp(Utility.trim(xml)) } def test(xml:Node) { val result = validate(xml) println(result,xml) } def main(args : Array[String]) { test( <exp> <add> <number>1</number> <mul> <number>2</number> <number>3</number> </mul> </add> </exp> ) } }
ポイントはtrimを先にして、空白を削除するということです。
xmlをパターンマッチしてくれるので楽です。
エラーの検出をもっとたくさんできると嬉しいのですけど。