ArrayLists "entschachteln"

F

Fawkes

Gast
Hallo,
ich habe gerade ein Problem bei dem ich nicht so richtig weiterkomme. Und zwar habe ich eine ArrayList, die wiederum weitere Arraylists enthält usw. das ganze kann beliebig groß sein. Die Daten hierfür werden aus einer XML-Datei ausgelesen.

Jetzt möchte ich jedes einzelne Element, jeder Arrayliste auslesen, finde aber keinen richtigen Ansatz dafür.
Hier mal etwas Code:

Java:
			JAXBContext jc = JAXBContext.newInstance("network");
			SwitchType switchT = new SwitchType();
			SwitchType switchT2 = new SwitchType();
			switchT2.setName(name);
			switchT2.setKabel(kabel);
			
			boolean fileExists = (new File(filename+".xml")).exists();
			if (fileExists) {
				
				List<SwitchType> currentSwitch = new ArrayList<SwitchType>();
				Unmarshaller um = jc.createUnmarshaller();
				JAXBElement<SwitchType> element = um.unmarshal(new StreamSource(filename+".xml"), SwitchType.class);
				SwitchType item = (SwitchType) element.getValue();
				currentSwitch = item.getSwitch();
				
				for (SwitchType u : currentSwitch) {
					//System.out.println(u.getName());
					if(u.getName().equals(parentName)){
						u.getSwitch().add(switchT2);
					}
					switchT.getSwitch().add(u);
				}
				
			}
			
			JAXBElement<SwitchType> transmissionElement = (new ObjectFactory()).createSwitch(switchT);

			Marshaller m = jc.createMarshaller();
			m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
			m.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");

			m.marshal(transmissionElement, new FileOutputStream(filename+".xml"));

Das Problem ist, dass ich mit der for-schleife nur die Listen der ersten Ebene bekomme und nicht die der weiteren.
Hätte da jemand einen Tipp wie ich hier am besten vorgehen könnte um an alle Elemente zu kommen?

Grüße
 
G

Gast2

Gast
Warum nicht einfach das XML als Datenstruktur nutzen und in dem Document per XPath navigieren?
 

pl4gu33

Top Contributor
mm sowas?
Java:
for(int i=0;i<list2.size();i++){
		for(int j=0;j<list2.get(i).size();j++){
			System.out.println(list2.get(i).get(j));
		}
}

das könntest du ja noch erweitern, dass du ne Methode baust, die sich selber aufruft und immer wieder neu ausliesst, weil so würde man z.b. zuviele Schleifen bekommen
 

Marco13

Top Contributor
Code nicht gelesen, aber vielleicht rekursiv
Code:
void besucheAlle(List list)
{
    for (Object object : list)
    {
        if (object instanceof List) besucheAlle((List)object);
        else machWasMit(object);
    }
}
Mit XPath würde sowas wohl auf XML-Ebene gehen, abe damit kenn' ich mich nicht richtig aus.
 
F

Fawkes

Gast
Danke für die schnellen antworten, ich habe das ganze jetzt wie vorschlagen per Rekursion gelöst.
 

Neue Themen


Oben