如何在Scala XML中访问父元素

14

scala.xml 包使用带标签的树节点来表示 XML。但在 Scala 2.7 中,这个树是否是单向的?因为似乎没有办法访问给定 Elem 的父级Elem。同样的,在XOM中,您可以使用getParentgetDocument访问器向树的根导航。Scala的XML API是否支持这样的操作?

3个回答

14

正如其他人所提到的,没有父链接使它们成为高效的不可变结构。例如:

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指向的节点是ac都指向的同一个节点。如果它必须指向父节点,则在在c中使用它时必须复制它。

要按照您所需的方式浏览该数据结构,需要使用称为纯应用XML游标的东西。


3

但是在Scala中,这个树是单向的吗?

是的。由于Scala XML中对不可变性的处理方式,节点不知道它们的父节点。


1

它是单向的,因此节点不知道它们的父级。

您可以通过转换为DOM来解决问题。标准库中似乎没有这方面的内容,但我在this thread上找到了一些有用的信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接