在Scala中嵌入XML(和其他语言?)

在Scala中嵌入XML(和其他语言?),scala,dsl,Scala,Dsl,我想知道如何实现scala.xml库,以便从xml中获取Elem-实例 所以我可以写: val xml = { <myxml> Some wired text withoud "'s or code like import x x.func() It's like a normal sting in triple-quotes. </myxml> } xml.text String = " Some text wir

我想知道如何实现
scala.xml
库,以便从xml中获取
Elem
-实例

所以我可以写:

val xml = {
  <myxml>
    Some wired text withoud "'s or code like
    import x
    x.func()
    It's like a normal sting in triple-quotes.
  </myxml>
}

xml.text

String = 
 "
    Some text wired withoud "'s or code like
    import x
    x.func()
    It's like a normal sting in triple-quotes.
  "

我希望避免使用像
PythonCode{“import…”}
这样的东西作为“DSL”。在scala中,XML被神奇地传输到
scala.XML
-类;与
Symbol
相同,我可以通过
vala='symoblname
获得它,但是在源代码中没有关于如何实现它的线索


我如何在自己身上做这样的事情,最好是作为内部DSL?

XML是scala语言的一种功能(*)-请参阅1.5节

但是,我认为2.10中会出现这种情况,它至少允许您定义自己的DSL:

val someLatex = latex"""\sqrt{\frac{a}{b}}}"""
这是一个实验性的特性,在SIP中进行了更全面的解释,但已经另外进行了说明。这一点(当然)是,可以在编译时检查字符串中代码的正确性(在非类型化语言中可能是:-),IDE甚至可以帮助您编写它(在非类型化语言中可能是:-)()


(*)-考虑到实现中存在的许多缺点,我们可能会在将来改变这种情况。我的理解是,字符串插值和反xml的组合可能仍然是一种真正的方法。

它是一种xml文本,就像
“foo”
是字符串文字,
42
是整数文字,
12.34
是浮点文字,
'foo
是符号文字,
(foo)=>foo+1
是函数文字,依此类推

Scala的文本比其他语言少(例如,它没有数组文本或regexp文本),但它有XML文本


请注意,在Scala 2.10中,通过允许您使用
StringContext
s截取和重新解释字符串文字,字符串文字的功能将大大增强。这些更强大的字符串文字将允许您实现所有代码段,包括XML,而无需单独的语言支持。将来可能会删除XML文字语言的重新版本。

呃,为什么要投反对票?也许我误解了这个问题?请注意,Scales也是一个很好的库。我不知道为什么人们如此热衷于反xml,我认为是时候开始宣传还有其他选择了。Michael Fogus用Scala编写了一个基本的dsl,可能与此无关o你的问题:我知道那个项目,他使用
Symbol
,用它你只能表示一个文字。
val x='import x
不起作用!用
StringContext
我可以构建自己的“文字”?这样我就不需要再使用三重引号了?或者scala.xml-future是这样的:
“Text”.text
而不是
text.text
var y = PythonCode {
  >>> import something
  >>> something.func()
}

y.toString
"""import something ..."""

y.execute  // e.g. passed to python as python-script
object o extends PythonCode {
  import x
  x.y()
}

o.toString

"""import x...."""
val someLatex = latex"""\sqrt{\frac{a}{b}}}"""