SAX намира възли на максимална дълбочина

Как мога да покажа имена на възли с максимална дълбочина в дървото със SAX. Алгоритъмът би бил добре за мен, за да разбера концепцията..

Например какво трябва да направя с методите startelement, endelement, startdocument, enddocument и какви променливи са ми необходими, за да изпълня задачата?

Благодаря ти!


person Ataman    schedule 15.05.2012    source източник


Отговори (1)


Това е по-скоро алгоритмичен проблем. Нещото, което трябва да отбележите, за да разрешите проблема, е, че всеки път, когато имате събитие startelement, вие сте преминали едно ниво надолу, а когато имате събитие endelement, сте преминали едно ниво нагоре. Идеята е да има променлива (ниво) и за всеки начален елемент да се увеличи (ниво++) и за всеки край да се намали (ниво--). Това означава, че когато се намери endelement за възел, стойността на променливата на ниво ще бъде дълбочината на възела. Тогава единственото нещо, което трябва да направите, е просто да следите макс. Версия на псевдокод ще бъде така:

 startdocument -> level=0;max=0;
 startelement  -> level++
 endelement    -> if (level>max) max=level; level--; 
 endocument    -> System.out.println(max)

Дано помогне.

person Mircea    schedule 15.05.2012
comment
Благодаря, това наистина помогна. Но това ще отпечата максималната дълбочина като число. За да покажа най-дълбоките възли. Предполагам, че мога да имам 2d масив или хешлист и да съхранявам име и ниво на възел в endelement, след което да избера максималното ниво с имената на възлите в крайния документ.. Мислите ли, че ще бъде правилно? - person Ataman; 15.05.2012
comment
Изглежда като добър план. Ако бях на ваше място, нямаше да следя възлите и нивата, първо щях да намеря максималната дълбочина и след това да премина през xml отново, използвайки sax анализатора и променливата ниво и където ниво == max щях да отпечатам възела. - person Mircea; 15.05.2012
comment
Съхранявайте набор от имена на възли, намерени на максималната дълбочина. Когато намерите нов максимум (level›max), изчистете набора и след това добавете името на този възел. Когато намерите нов възел на същата дълбочина като максималната (ниво=макс.), добавете името на този възел към набора. - person Michael Kay; 15.05.2012