如何在Scala XML中访问父元素

时间:2009-10-17 13:45:16

标签: xml scala

scala.xml包表示带有标记树节点的XML。但是这个树在Scala 2.7中是单向的,因为似乎无法访问给定Elem的{​​{1}}父级吗?同样似乎适用于父Elem。例如,在XOM中,您有DocumentgetParent个访问者可以导航到树的根目录。可以使用Scala的XML API完成吗?

3 个答案:

答案 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指向的节点是ac指向的完全相同的节点。如果必须指向父级,那么在c中使用它时,您必须复制它。

要以您希望的方式在该数据结构中导航,您需要所谓的Purely Applicative XML Cursor。

答案 1 :(得分:3)

  

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

是。由于scala.xml中的不变性方法,节点不知道它们的父节点。

答案 2 :(得分:1)

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

您可以通过转换为DOM来解决问题。标准库中似乎没有任何内容,但我在主题上找到this thread可能有用。