2009-10-17 25 views
12

Pakiet scala.xml reprezentuje XML z węzłami drzewa z etykietami. Ale czy to drzewo jest jednokierunkowe w Scala 2.7, ponieważ wydaje się, że nie ma możliwości uzyskania dostępu do rodzica danego Elem danego Elem? To samo dotyczy rodzica Document. Na przykład w XOM masz dostęp do getParent i getDocument uzyskiwania dostępu do katalogu głównego drzewa. Czy można to zrobić za pomocą interfejsu XML API Scala?Jak uzyskać dostęp do elementu nadrzędnego w Scala XML

Odpowiedz

12

Jak wspomniano przez innych, nie ma żadnych linków macierzystych, aby uczynić je wydajnymi, niezmiennymi strukturami. Na przykład:

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> 

Żadna struktura danych nie została skopiowana. Węzeł wskazany przez b jest tym samym węzłem wskazanym zarówno przez a jak i c. Jeśli musiałby wskazywać na rodzica, to musiałbyś go skopiować, gdy używałbyś go w c.

Aby nawigować w tej strukturze danych w pożądany sposób, potrzebny jest tak zwany czysto aplikacyjny kursor XML.

3

Ale czy to drzewo jest jednokierunkowe w Scali?

Tak. Ze względu na podejście do niezmienności w scala.xml, węzły nie znają swojego rodzica.

1

Jest jednokierunkowy, więc węzły nie są świadome swojego rodzica.

Być może będziesz w stanie rozwiązać swój problem, przekształcając go w DOM. W standardowej bibliotece nie ma nic, ale znalazłem this thread na temat, który może być przydatny.

Powiązane problemy