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

时间:2012-06-25 12:46:44

标签: xml scala anti-xml

假设我将XML文档存储为Anti-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]:+附加(作为兄弟姐妹),但这不是我想要的:

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

如何将其作为<foo>的最后一个孩子附加?看the documentation我没有看到明显的方法。


Scala XML Building: Adding children to existing Nodes类似,但此问题仅适用于反XML而不是scala.xml

2 个答案:

答案 0 :(得分:9)

Elemcase class,因此您可以使用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方法为automatically generated for case classes,它采用命名参数,允许您更改原始实例的任何单个字段。

答案 1 :(得分:3)

虽然尚不相关,但Anti-XML repo中addChild/ren的{​​{1}}上有Elem方法。 它的实现目前包含一个bug,但有一个突出的pull请求来修复它。 所以你应该在将来的版本中使用它。

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