假设我将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
。
答案 0 :(得分:9)
Elem
是case 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请求来修复它。
所以你应该在将来的版本中使用它。
(会不会发表评论,但我还不允许这样做。)