Подтвердить что ты не робот

Как получить доступ к родительскому элементу в Scala XML

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

4b9b3361

Ответ 1

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

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>

Никакая структура данных не была скопирована. node, на который указывает b, - это тот самый node, на который указывают как a, так и c. Если он должен был указывать на родителя, тогда вам придется сделать его копию, когда вы использовали его в c.

Чтобы перемещаться в этой структуре данных так, как вам нужно, вам понадобится так называемый чисто аппликативный XML-курсор.

Ответ 2

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

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

Ответ 3

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

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