将元素追加为Anti-XML元素的子元素

Mec*_*ail 6 xml scala anti-xml

假设我有一个XML文档存储为Anti-XML Elem:

val root : Elem =
    <foo attr="val">
        <bar/>
    </foo>
Run Code Online (Sandbox Code Playgroud)

.我希望<baz>blahblahblah</baz>作为一个孩子附加到根元素,给予

val modified_root : Elem =
    <foo attr="val">
        <bar/>
        <baz>blahblahblah</baz>
    </foo>
Run Code Online (Sandbox Code Playgroud)

为了比较,在Python中你可以root.append(foo).

我知道我可以附加(作为兄弟姐妹)Group[Node]使用:+,但这不是我想要的:

<foo attr="val">
    <bar/>
</foo>
<baz>blahblahblah</baz>
Run Code Online (Sandbox Code Playgroud)

如何将其作为最后一个孩子追加<foo>?看看文档,我没有看到明显的方法.


Scala XML Building类似:向现有节点添加子节点,但此问题仅适用于Anti-XML而不是scala.xml.

Tra*_*own 9

Elem是一个案例类,所以你可以使用copy:

import com.codecommit.antixml._

val root: Elem = <foo attr="val"><bar/></foo>.convert
val child: Elem = <baz>blahblahblah</baz>.convert

val modified: Elem = root.copy(children = root.children :+ child)
Run Code Online (Sandbox Code Playgroud)

copy方法是为案例类自动生成的,它采用命名参数,允许您更改原始实例的任何单个字段.