2012-06-25 118 views
6

假設的孩子,我有存儲爲反XML Elem XML文檔:附加元素作爲反XML元素

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

回答

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,這需要命名參數,讓你改變原來實例的任何個人領域。

3

儘管還沒有相關性,但在Anti-XML回購中存在addChild/ren方法Elemmaster。 它的實現當前包含一個錯誤,但是有一個優秀的pull請求來修復它。 所以你應該在未來的版本中使用它。

(會做出這樣的評論,但我還沒有被允許這樣做。)