假设我有以下课程:
class Person(val firstName:String,val lastName:String)
是否有自动方法从此类生成xml而无需手动创建toXml()方法?理想情况下,输出将是这样的:
<Person>
<firstName>John</firstName>
<lastName>Smith</lastName>
</Person>
似乎应该有一种方法可以做到这一点,而无需手动编写所有这些.也许有一个我还没有找到的特质?
我根据README.md文件安装了ensime,但是,我在inferior-ensime-server缓冲区中遇到以下错误:
INFO: Fatal Error: scala.tools.nsc.MissingRequirementError: object scala not found.
scala.tools.nsc.MissingRequirementError: object scala not found.
at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:516)
at scala.tools.nsc.symtab.Definitions$definitions$.ScalaPackage(Definitions.scala:43)
at scala.tools.nsc.symtab.Definitions$definitions$.ScalaPackageClass(Definitions.scala:44)
at scala.tools.nsc.symtab.Definitions$definitions$.UnitClass(Definitions.scala:89)
at scala.tools.nsc.symtab.Definitions$definitions$.init(Definitions.scala:786)
at scala.tools.nsc.Global$Run.(Global.scala:593)
at scala.tools.nsc.interactive.Global$TyperRun.(Global.scala:473)
at scala.tools.nsc.interactive.Global.newTyperRun(Global.scala:535)
at scala.tools.nsc.interactive.Global.reloadSources(Global.scala:289)
at scala.tools.nsc.interactive.Global$$anonfun$reload$1.apply(Global.scala:300)
at scala.tools.nsc.interactive.Global$$anonfun$reload$1.apply(Global.scala:300)
at scala.tools.nsc.interactive.Global.respond(Global.scala:276)
at scala.tools.nsc.interactive.Global.reload(Global.scala:300)
at scala.tools.nsc.interactive.CompilerControl$$anon$1.apply$mcV$sp(CompilerControl.scala:81)
at scala.tools.nsc.interactive.Global.pollForWork(Global.scala:132)
at scala.tools.nsc.interactive.Global$$anon$2.run(Global.scala:192)
也:
INFO: Fatal Error: scala.tools.nsc.MissingRequirementError: class scala.Array not found.
scala.tools.nsc.MissingRequirementError: class scala.Array not found.
at scala.tools.nsc.symtab.Definitions$definitions$.getModuleOrClass(Definitions.scala:516)
at scala.tools.nsc.symtab.Definitions$definitions$.getClass(Definitions.scala:474)
at scala.tools.nsc.symtab.Definitions$definitions$.ArrayClass(Definitions.scala:217)
at scala.tools.nsc.backend.icode.TypeKinds$REFERENCE.(TypeKinds.scala:258)
at scala.tools.nsc.backend.icode.GenICode$ICodePhase.(GenICode.scala:55)
at scala.tools.nsc.backend.icode.GenICode.newPhase(GenICode.scala:43)
at scala.tools.nsc.backend.icode.GenICode.newPhase(GenICode.scala:25)
at scala.tools.nsc.Global$Run$$anonfun$4.apply(Global.scala:606) … 我正在编写一个工具来使用scala更新一些xml文件(本例中为pom.xml),因为它在java中的工作量明显高于(理论上)scala.我可以很好地解析xml文件,但我需要替换现有xml中的节点并重写结果.例如:
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
所以我想找到这样的所有节点并将其替换为:
<dependency>
<groupId>foo</groupId>
<artifactId>bar</artifactId>
<version>1.0</version> <!-- notice the lack of -SNAPSHOT here -->
</dependency>
Run Code Online (Sandbox Code Playgroud)
所以,我可以简单地获得所有版本节点,但是如何用我想要的节点替换它们?
// document is already defined as the head of the xml file
nodes = for (node <- document \\ "version"; if (node.text.contains("SNAPSHOT"))) yeild node
Run Code Online (Sandbox Code Playgroud)
那我想做点什么:
for (node <- nodes) {
node.text = node.text.split("-")(0)
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为节点是不可变的.我查看了Node的复制方法,但它不包含text在参数中.