如何在Scala中创建没有文字元素名称的XML根节点?

如何在Scala中创建没有文字元素名称的XML根节点?,xml,scala,scala-2.8,Xml,Scala,Scala 2.8,我希望创建如下文档: <root/> val root_node_name = "root" val doc = <{root_node_name}/> 可编译,但在运行时我得到以下空指针异常: java.lang.NullPointerException at scala.xml.Utility$.toXML(Utility.scala:201) at scala.xml.Utility$$anonfun$sequenceToXML$2.apply(Utility.

我希望创建如下文档:

<root/>
val root_node_name = "root"
val doc = <{root_node_name}/>
可编译,但在运行时我得到以下空指针异常:

java.lang.NullPointerException
at scala.xml.Utility$.toXML(Utility.scala:201)
at scala.xml.Utility$$anonfun$sequenceToXML$2.apply(Utility.scala:235)
at scala.xml.Utility$$anonfun$sequenceToXML$2.apply(Utility.scala:235)
at scala.Iterator$class.foreach(Iterator.scala:414)
at scala.runtime.BoxedArray$AnyIterator.foreach(BoxedArray.scala:45)
at scala.Iterable$class.foreach(Iterable...

我使用的是Scala 2.8。有没有关于如何做到这一点的例子?谢谢。

您应该传递属性的空列表(
scala.xml.Null
),如果您不想要任何子项,甚至不应该包含最后一个参数。您需要一个空的子项列表,而不是一个恰好为
null
的子项。因此:

scala> val root_node_name = "root"
root_node_name: java.lang.String = root

scala> val doc = new scala.xml.Elem(null, root_node_name, scala.xml.Null , scala.xml.TopScope)
doc: scala.xml.Elem = <root></root>
scala>val root\u node\u name=“root”
根节点名称:java.lang.String=root
scala>val doc=new scala.xml.Elem(null,根节点名称,scala.xml.null,scala.xml.TopScope)
doc:scala.xml.Elem=

在2.8上,您可以执行以下操作:

scala> val r = <root/>
r: scala.xml.Elem = <root></root>

scala> r.copy(label="bar")
res0: scala.xml.Elem = <bar></bar>
scala>val r=
r:scala.xml.Elem=
scala>r.copy(label=“bar”)
res0:scala.xml.Elem=
因此,如果您的初始文档是
,那么只需使用文本即可。如果需要在运行时设置标签,可以定义如下方法:

def newRoot(label:String) = {val r = <root/>; r.copy(label=label) }
def newRoot(label:String)={val r=;r.copy(label=label)}

现在运行时会出现弃用警告。使用当前API(Scala.xml 2.11.x):
val doc=Elem.apply(null,root\u node\u name,Scala.xml.null,Scala.xml.TopScope)
scala> val r = <root/>
r: scala.xml.Elem = <root></root>

scala> r.copy(label="bar")
res0: scala.xml.Elem = <bar></bar>
def newRoot(label:String) = {val r = <root/>; r.copy(label=label) }