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

2

你可以试试

val txt1 = s"<a>${foo("updated")}</a>"
XML.loadString(txt1)

这将 xml 格式表示为

res0: scala.xml.Elem = <a>The FOO is updated</a>
于 2019-01-09T12:52:33.453 回答
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 回答