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…