2015-02-07 48 views
3

我對標準Scala XML庫非常直觀(除了定義行內XML和基本路徑樹遍歷)以及缺少任何明顯的替代品感到驚訝。看起來在某一時刻,反xml正在獲得牽引力,但看起來發展有been stale for some timeScala XML Library for 2.10+

具體來說,我正在尋找通過沿線的添加和刪除子樹,一些操縱XML樹:

val tree1 = <root><foo>foo</foo></root> 
val tree2 = <root><bar>bar</bar></root> 
tree1 + tree2 == <root><foo>foo</foo><bar>bar</bar></root> 

拉皮條現有斯卡拉XML庫肯定是一種選擇,但如果存在現有提供這種功能的庫我寧願讓它們完成繁重的工作。

2015年,人們對Scala的適當XML庫有何建議(即> = 2.10),這種操作是否可行並且直截了當?

+0

好吧,如果行XML是不夠的,哇你,知道你也可以使用任何Java XML庫(和有不少)。 – 2015-02-07 05:20:30

+0

謝謝,@PaulDraper,這是真的。儘管Java集成有幫助,但它通常伴隨着它自己的一系列挑戰,特別是在試圖保持慣用準確性時。使用scala.collection.JavaConversions可以消除這個問題,但我的偏好是使用純粹的Scala實現(如果存在的話)。 我並不是說要縮短Scala團隊在XML實現方面的成就。內聯XML相當不錯。但樹木操作開始變得非常快速。 – eharik 2015-02-07 13:46:39

+0

FWIW [this](http://stackoverflow.com/questions/2199040/scala-xml-building-adding-children-to-existing-nodes)是我目前正在運行的方法。 – eharik 2015-02-07 16:37:29

回答

2

還有一個更新的反xml分支,可以找到here。版本0.5.2與Scala 2.11一起使用。

使用抗XML,你的使用情況可以實現:

import com.codecommit.antixml._ 

val tree1 = <root><foo>foo</foo></root>.convert 
val tree2 = <root><bar>bar</bar></root>.convert 

tree1.addChildren(tree2.children) 
// <root><foo>foo</foo><bar>bar</bar></root> 
+0

感謝@ncreep!我會試一試。 – eharik 2015-02-08 18:23:12