Scala 中动态 XML 的函数调用
Function calls for dynamic XML in Scala
假设我有以下代码:
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("updated")}</a>
制作它的规范方法是什么
xml: scala.xml.Elem = <a>The FOO is updated</a>
甚至可以不用反射吗?
你可以试试
val txt1 = s"<a>${foo("updated")}</a>"
XML.loadString(txt1)
这表示 xml 格式为
res0: scala.xml.Elem = <a>The FOO is updated</a>
我想这是我自己的错,因为我试图让这个问题尽可能笼统。我正在寻找的答案是在运行时从外部存储更新 XML 文字的某种方式。
做到这一点的最佳方式是模板引擎。 Scala 有几个选项:
- 旋转
- Scalatags
- 升级
就我的项目而言,我发现 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>
假设我有以下代码:
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("updated")}</a>
制作它的规范方法是什么
xml: scala.xml.Elem = <a>The FOO is updated</a>
甚至可以不用反射吗?
你可以试试
val txt1 = s"<a>${foo("updated")}</a>"
XML.loadString(txt1)
这表示 xml 格式为
res0: scala.xml.Elem = <a>The FOO is updated</a>
我想这是我自己的错,因为我试图让这个问题尽可能笼统。我正在寻找的答案是在运行时从外部存储更新 XML 文字的某种方式。
做到这一点的最佳方式是模板引擎。 Scala 有几个选项:
- 旋转
- Scalatags
- 升级
就我的项目而言,我发现 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>