使用Scala将XML转换为系统属性
使用Scala,转换的最佳方法是什么使用Scala将XML转换为系统属性,xml,scala,Xml,Scala,使用Scala,转换的最佳方法是什么 <myapp> <username>bill</username> <password>secret123</password> <background>#FFFFFF</background> </myapp> 假设转换器附加到sys.props?支持XML格式,虽然不是您描述的格式。谢谢,我如何处理更深层次的条目,例如william,以解析为my
<myapp>
<username>bill</username>
<password>secret123</password>
<background>#FFFFFF</background>
</myapp>
假设转换器附加到sys.props?支持XML格式,虽然不是您描述的格式。谢谢,我如何处理更深层次的条目,例如william,以解析为myapp.username.secondary=william?您的XML是否会被修复(即,可能只存在少量定义良好的标记)?如果是这样的话,那么只做固定的XPath表达式可能会更容易。例如,val secondary=e\\“secondary”;如果(!secondary.isEmpty)sp+=(“myapp.username.secondary”,secondary.text)理想情况下希望它是一种开放格式,但这也很好:)您可以将我在答案中所做的调整为开放格式-您需要使其递归。但基本概念/API是相同的。
scala> val s = "<myapp><username>bill</username><password>secret123</password><background>#FFFFFF</background></myapp>"
s: java.lang.String = <myapp><username>bill</username><password>secret123</password><background>#FFFFFF</background></myapp>
scala> val e = xml.XML.loadString(s)
e: scala.xml.Elem = <myapp><username>bill</username><password>secret123</password><background>#FFFFFF</background></myapp>
scala> val sp = new sys.SystemProperties
sp: scala.sys.SystemProperties =
Map(env.emacs -> "", java.runtime.name -> Java(TM) SE Runtime Environment, ....)
scala> sp ++= e.child.map(n => (e.label + "." + n.label, n.text))
res11: sp.type =
Map(env.emacs -> "", java.runtime.name -> Java(TM) SE Runtime Environment, ...)
scala> val s = "<myapp><username>bill</username><password>secret123</password><background>#FFFFFF</background></myapp>"
s: java.lang.String = <myapp><username>bill</username><password>secret123</password><background>#FFFFFF</background></myapp>
scala> val e = xml.XML.loadString(s)
e: scala.xml.Elem = <myapp><username>bill</username><password>secret123</password><background>#FFFFFF</background></myapp>
scala> val sp = new sys.SystemProperties
sp: scala.sys.SystemProperties =
Map(env.emacs -> "", java.runtime.name -> Java(TM) SE Runtime Environment, ....)
scala> sp ++= e.child.map(n => (e.label + "." + n.label, n.text))
res11: sp.type =
Map(env.emacs -> "", java.runtime.name -> Java(TM) SE Runtime Environment, ...)
scala> val p = java.lang.System.getProperties
p: java.util.Properties =
{env.emacs=, java.runtime.name=Java(TM) SE Runtime Environment,...}
scala> import collection.JavaConversions._
import collection.JavaConversions._
scala> p filter { case (k, v) => k.startsWith("myapp") } \
foreach { case (k,v) => println(k + "=" + v) }
myapp.password=secret123
myapp.background=#FFFFFF
myapp.username=bill