6

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

val root : Elem =
    <foo attr="val">
        <bar/>
    </foo>

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

val modified_root : Elem =
    <foo attr="val">
        <bar/>
        <baz>blahblahblah</baz>
    </foo>

相比之下,在 Python 中,您只需root.append(foo).

我知道我可以将(作为兄弟)附加到Group[Node]using :+,但这不是我想要的:

<foo attr="val">
    <bar/>
</foo>
<baz>blahblahblah</baz>

我如何将它附加为的最后一个孩子<foo>?查看文档,我看不到明显的方法。


类似于Scala XML Building:Adding children to existing Nodes,除了这个问题是针对 Anti-XML 而不是scala.xml.

4

2 回答 2

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)

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

于 2012-06-25T13:08:38.403 回答
3

虽然还不相关,但在 Anti-XML repo 中有一个方法addChild/ren。它的实现当前包含一个错误,但有一个未完成的拉取请求来修复它。所以你可能应该在未来的版本中使用它。Elemmaster

(本来会发表评论的,但我还不允许这样做。)

于 2012-06-25T16:31:54.403 回答