2009-10-17 4 views
12

Пакет scala.xml представляет XML с узлами отмеченного дерева. Но является ли это дерево однонаправленным в Scala 2.7, поскольку, похоже, нет способа получить доступ к родителю Elem данного Elem? То же самое относится к родителям Document. Например, в XOM у вас есть getParent и getDocument аксессуаров для перехода к корню дерева. Можно ли это сделать с помощью XML-интерфейса Scala?Как получить доступ к родительскому элементу в Scala XML

ответ

12

Как уже упоминалось, нет родительских связей, чтобы сделать их эффективными неизменяемыми структурами. Например:

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-курсор.

3

Но это дерево однонаправленное в Scala?

Да. Из-за подхода к неизменности в scala.xml узлы не знают своего родителя.

1

Это однонаправленный, поэтому узлы не знают своего родителя.

Возможно, у вас возникнет проблема с преобразованием в DOM. Кажется, в этой стандартной библиотеке ничего нет, но я нашел this thread на эту тему, которая может быть полезна.

Смежные вопросы