Ответ 1
Как уже упоминалось другими, нет родительских ссылок, чтобы сделать их эффективными неизменяемыми структурами. Например:
scala> val a = <parent><children>me</children></parent>
a: scala.xml.Elem = <parent><children>me</children></parent>
scala> val b = a.child(0)
b: scala.xml.Node = <children>me</children>
scala> val c = <newparent>{b}</newparent>
c: scala.xml.Elem = <newparent><children>me</children></newparent>
scala> a
res0: scala.xml.Elem = <parent><children>me</children></parent>
scala> b
res1: scala.xml.Node = <children>me</children>
scala> c
res3: scala.xml.Elem = <newparent><children>me</children></newparent>
Никакая структура данных не была скопирована. node, на который указывает b
, - это тот самый node, на который указывают как a
, так и c
. Если он должен был указывать на родителя, тогда вам придется сделать его копию, когда вы использовали его в c
.
Чтобы перемещаться в этой структуре данных так, как вам нужно, вам понадобится так называемый чисто аппликативный XML-курсор.