JAVA - czytanie pliku XML a rekurencja


(Szczepi 86) #1


Tworze pewien program w Javie, ktory ma tworzyc strukture polaczen rownoleglych i szeregowych (podobnie jak to jest w przypadku opornikow) na podstawie pliku XML, ktory wskazuje uzytkownik.

Otoz stworzylem w javie klase "Polaczenie" oraz dwie klasy dziedziczace po tej klasie: "PolaczenieSzeregowe" i "PolaczenieRownolegle". Chodzi tu o typowe polaczenie opornikow. W czasie pracy programu tworze sobie liste ArrayList i wrzucam do niej zarowno polaczenia szeregowe jak i rownolegle. Dodatkowo mam klase System, ktora zawiera jedna wielka liste wszystkich zawartych w niej polaczen czyli ArrayList, oraz klase Komponent, ktora jest jednym malym poszczegolnym elemenem (opornikiem). Wiadomo ze konieczna jest tu rekurencja poniewaz kazde polaczenie rownolegle moze sie skladac z dowolnej liczby polaczen szeregowych, ktore moga zawierac kolejne elementy polaczone rownolegle i tak dalej...

Przyklad pliku XML jaki podaje uzytkownik wyglada nastepujaco:

<?xml version="1.0" encoding="UTF-8"?>








 2 




 3 






 1 







 4

Wyglada to tak:ooooo--|E1|----|E2|----oooo|oooooooooooooo| ---- |oooooooooooooo|-----|E4|-----oooo-------|E3|------- W klasie System mam wiec liste zawierajaca dwa elementy - PolaczenieRownolegle (z komponentami E1, E2, E3), oraz PolaczenieSzeregowe (ma tylko komponent E4). Wiem ze moze dziwnie wyglada polaczenie szeregowe z jednym komponentem tylko, ale poniewaz mam ArrayList to musza tam byc obiekty tej samej klasy. Nie moge wiec zapisac na ArrayList polaczenia rownoleglego i komponentu E4. Dlatego "sztucznie" tworze PolaczenieSzeregowe z jednym komponentem. Klasa PolaczenieRownolegle zawiera liste z innymi listami - pierwsza lista ma komponenty E1, E2, a druga lista komponent E3. Problem polega na tym, jak sobie z rekurencja pradzic przy czytaniu pliku XML. Nazwy znacznikow XML sa adekwatne do ich odpowiednikow wsrod klas zrobionych przeze w Javie. Chcialbym sie na przyklad dowiedziec z pliku XML ile jest polaczen szeregowych, ale tylko tak globalnie - w naszym przykladzie jest jedno polaczenie szeregowe i jedno duze rownolegle. Ale gdy napisze:

NodeList listaPolaczen = doc.getElementsByTagName("polaczenieSzeregowe");

int ilosc = schaltungListe.getLength();

System.out.println("ilosc polaczen szeregowych w systemie: "+ilosc );

To wynik dostaje 3 czyli tyle ile jest polaczen szeregowych lacznie z tymi schowanymi wewnatrz innych polaczen.... ´

Jak sobie z tym poradzic? Przepraszam jesli brzmi to dosc skomplikowanie, ale staralem sie wyjasnic najlepiej jak umiem...

Z gory dziekuje za wszelka pomoc

-- Dodane 27.08.2010 (Pt) 14:15 --

Jeszcze jedno mi sie przypomnialo pytanie... czy w ogole mozna w pliku XML zagniezdzac w sobie znaczniki o tej samej nazwie tak jest w podanym przeze mnie przykladzie? Bo jesli nie mozna to w takim razie konieczne bedzie w ogole zmienienie podejscia do tego problemu...


(ra-v) #2

Co do XMLa masz błąd w "" - powinno być " a poza tym jest ok, możesz zagnieżdżać elementy o tej samej nazwie w jednym bloku.


(Szczepi 86) #3

No dobra to wiem, że mogę zagnieżdżać elementy :slight_smile: ale to jeszcze nie rozwiązuje mojego problemu :slight_smile: