scala.xml
包使用带标签的树节点来表示 XML。但在 Scala 2.7 中,这个树是否是单向的?因为似乎没有办法访问给定 Elem
的父级Elem
。同样的,在XOM中,您可以使用getParent
和getDocument
访问器向树的根导航。Scala的XML API是否支持这样的操作?
正如其他人所提到的,没有父链接使它们成为高效的不可变结构。例如:
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>
没有复制任何数据结构。由b
指向的节点是a
和c
都指向的同一个节点。如果它必须指向父节点,则在在c
中使用它时必须复制它。
要按照您所需的方式浏览该数据结构,需要使用称为纯应用XML游标的东西。
但是在Scala中,这个树是单向的吗?
是的。由于Scala XML中对不可变性的处理方式,节点不知道它们的父节点。