0

次のコードがあるとします。

import scala.xml._

def foo(bar:String) = s"The FOO is $bar"

var xml =
    <a type ={foo("attribute")}>
        {foo("text node")}
    </a>

val txt = "<a>{foo(\"updated\")}</a>"

XML.loadString(txt)

その結果、

xml: scala.xml.Elem = <a>{foo(&quot;updated&quot;)}</a>

それを作るための標準的な方法は何ですか

xml: scala.xml.Elem = <a>The FOO is updated</a>

反射なしでも可能ですか?

4

2 に答える 2

0

質問をできるだけ一般的にしようとしたのは私自身の責任だと思います。私が探していた答えは、実行時に外部ストレージから XML リテラルを更新する何らかの方法でした。

そのための最良の方法は、テンプレート エンジンです。Scala にはいくつかのオプションがあります。

  • クルクル回す
  • スカラタグ
  • スケーリング

私のプロジェクトの目的には、Scalate が最適であることがわかりました。したがって、私自身の質問に答えると、次のようになります。

import scala.xml._
import org.fusesource.scalate._

def foo(bar:String) = s"The FOO is $bar"

val engine = new TemplateEngine
val template = engine.load("test.ssp", List(Binding("foo", "String")))
val str1 = engine.layout("test.ssp",Map("foo"-> foo("bar")))
val str2 = engine.layout("test.ssp",Map("foo"-> foo("updated")))

テンプレート「test.ssp」は単純に次のとおりです。

<a>${foo}</a>
于 2019-01-15T14:29:20.300 に答える