scala.xml
包表示带有标记树节点的XML。但是这个树在Scala 2.7中是单向的,因为似乎无法访问给定Elem
的{{1}}父级吗?同样似乎适用于父Elem
。例如,在XOM中,您有Document
和getParent
个访问者可以导航到树的根目录。可以使用Scala的XML API完成吗?
答案 0 :(得分:13)
正如其他人所提到的,没有父链接可以使它们成为高效的不可变结构。例如:
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
中使用它时,您必须复制它。
要以您希望的方式在该数据结构中导航,您需要所谓的Purely Applicative XML Cursor。
答案 1 :(得分:3)
但是这个树在Scala中是单向的吗?
是。由于scala.xml中的不变性方法,节点不知道它们的父节点。
答案 2 :(得分:1)
它是单向的,因此节点不知道它们的父节点。
您可以通过转换为DOM来解决问题。标准库中似乎没有任何内容,但我在主题上找到this thread可能有用。