Erstellen von .xml-Datei funktioniert nicht richtig

Devilness

Grünschnabel
Guten Abend alle zusammen,

ich bin gerade dabei ein Programm zu schreiben, was .csv-Dateien auslesen kann und deren Inhalt in .xml-Dateien abspeichert. Das Einzige, was dabei jedoch herauskommt, ist:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><Team/>

Hier ist der entsprechende Codeteil:

Code:
if("newkay".equals(e.getActionCommand())) {
			// Erstellen neuer Datei
			String getVar = input.getText();
			System.out.println(getVar);
			
			String path = "./CSV/" + comboVar;
			System.out.println(path);
			
			String[] ppos;
			String[] pname;
			String[] page;
			String[] pstr;
			String[] pexp;
			String[] ptrain;
			String[] pawp;
			
			int counter;
			
			try {											// Datei lesen (.csv)
				Scanner scan = new Scanner(new File(path));
				counter = -1;
				
				while(scan.hasNextLine()) {
					scan.nextLine();
					counter++;
				}
				
				System.out.println(counter);
				
				Scanner scanner = new Scanner(new File(path));
				
				ppos = new String[counter];
				pname = new String[counter];
				page = new String[counter];
				pstr = new String[counter];
				pexp = new String[counter];
				ptrain = new String[counter];
				pawp = new String[counter];
				
				System.out.println(pawp.length);
				
				counter = -1;
				
				while(scanner.hasNextLine()) {
					if(counter < 0) {
						System.out.println("Scanvorgang gestartet.");
						scanner.nextLine();
						counter++;
					} else {
						String current = scanner.nextLine();
						String[] splitted = new String[7];
						
						splitted = current.split(";");
						ppos[counter] = splitted[0];
						page[counter] = splitted[2];
						pstr[counter] = splitted[3];
						pexp[counter] = splitted[4];
						ptrain[counter] = splitted[5];
						pawp[counter] = splitted[6];
						
						System.out.println(splitted[1]);
						String[] splitted_2 = new String[3];
						
						splitted_2 = splitted[1].split("\"");
						System.out.println(splitted_2[1]);
						pname[counter] = splitted_2[1];		// Alle Werte in Arrays gelagert
					}
				}
				
				
															// Datei schreiben (.xml)
				DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
				DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
				
				//root elements
				Document doc = docBuilder.newDocument();
				Element rootElement = doc.createElement("Team");
				doc.appendChild(rootElement);

				for (int c = 0; c < counter; c++) {
					//player elements
					Element player = doc.createElement("Spieler");
					rootElement.appendChild(player);
					player.setAttribute("name", pname[ c]);
					player.setAttribute("pos", ppos[ c]);
				
					for (int d = 0; d < 5; d++) {
						if(d == 0) {
							//valueType elements
							Element valueType = doc.createElement("Werttyp");
							player.appendChild(valueType);
							valueType.setAttribute("type", "Alter");
 
							//lastname elements
							Element val = doc.createElement("Wert");
							val.appendChild(doc.createTextNode(page[ c]));
							valueType.appendChild(val);
						}else if(d == 0) {
							//valueType elements
							Element valueType = doc.createElement("Werttyp");
							player.appendChild(valueType);
							valueType.setAttribute("type", "Stärke");
 
							//lastname elements
							Element val = doc.createElement("Wert");
							val.appendChild(doc.createTextNode(pstr[ c]));
							valueType.appendChild(val);
						}else if(d == 0) {
							//valueType elements
							Element valueType = doc.createElement("Werttyp");
							player.appendChild(valueType);
							valueType.setAttribute("type", "Erfahrung");
 
							//lastname elements
							Element val = doc.createElement("Wert");
							val.appendChild(doc.createTextNode(pexp[ c]));
							valueType.appendChild(val);
						}else if(d == 0) {
							//valueType elements
							Element valueType = doc.createElement("Werttyp");
							player.appendChild(valueType);
							valueType.setAttribute("type", "Training");
 
							//lastname elements
							Element val = doc.createElement("Wert");
							val.appendChild(doc.createTextNode(ptrain[ c]));
							valueType.appendChild(val);
						}else if(d == 0) {
							//valueType elements
							Element valueType = doc.createElement("Werttyp");
							player.appendChild(valueType);
							valueType.setAttribute("type", "AWP");
 
							//lastname elements
							Element val = doc.createElement("Wert");
							val.appendChild(doc.createTextNode(pawp[ c]));
							valueType.appendChild(val);
						}
					}
				}
 
				//write the content into xml file
				TransformerFactory transformerFactory = TransformerFactory.newInstance();
				Transformer transformer = transformerFactory.newTransformer();
				DOMSource source = new DOMSource(doc);
				StreamResult result =  new StreamResult(new File("./XML/"+getVar+".xml"));
				transformer.transform(source, result);
 
				System.out.println("Done");
			} catch(FileNotFoundException e2) {
				e2.printStackTrace();
			} catch(ParserConfigurationException e2){
				e2.printStackTrace();
			} catch(TransformerException e2){
				e2.printStackTrace();
			} catch (TransformerFactoryConfigurationError e2) {
				e2.printStackTrace();
			}
			
			System.out.println("Okay");
			newIntFrame.setVisible(false);
		} else if("can".equals(e.getActionCommand())) {
			// "Schließen" des InFrames
			System.out.println("Cancel");
			newIntFrame.setVisible(false);
		}

Ich hatte auch schon den Thread hier zu Rate gezogen, aber ich finde den Fehler trotzdem nicht: http://www.tutorials.de/java/179102-java-aus-2-arrays-xml-datei-erzeugen.html

Das Einlesen der Daten aus der .csv-Datei funktioniert einwandfrei, lediglich das Schreiben will nicht so recht funktionieren...

Ich wäre sehr froh über jede Art von Hilfe ;)

Gruß Devilness
 
Herzlich Willkommen hier im Forum ^^

Ich kann so auf den ersten Blick keinen Fehler erkennen. Mir ist nur was aufgefallen, nämlich, dass du in der inneren der letzten Schleife bei allen if-Abfragen auf d == 0 prüfst. Ist sicher nicht so gewollt, is mir aber so ins Auge gesprungen.

Ok, jetzt wo ich genauer drauf schaue, hab ich den Fehler wohl doch gefunden. Laut deiner Datei-Ausgabe wird gar kein Spieler erstellt. Und wenn man dann genauer hinschaut, dann sieht man, dass die Variable counter nicht über den Wert 0 hinaus kommt. Sie wird nur in Zeile 48 erhöht und dannach nie wieder und da sie auf 0 ist, wird die Schleife für die Erstellung der Spieler auch nie wirklich gestartet.

EDIT:
Bei der Gelegenheit fällt mir noch was auf. Laut dem Ablauf zählst du zuerst die Anzahl der Zeilen, damit du die Arrays in der richtigen Größe initialisieren kannst. Das Problem dabei ist, das Scanner (vorsicht, kann mich auch irren, aber wäre das der Fall, würde counter bis ins Unendliche zählen), wenn er am Ende einer Datei angelangt ist, nicht wieder an den Anfang springt. Insofern wird auch überhaupt nix eingelesen und der Rest wird somit auch nie ausgeführt, da wie bereits weiter oben erwähnt, die Bedingungen nicht erfüllt sind und die Schleifen nicht anspringen.

Ich würde es anstatt mit Arrays dann lieber mit Listen lösen und diese auch gleich beim lesen der Zeilen auch befüllen. Dadurch fällt das Counter-Zeug weg, man braucht auf ihn nicht mehr zu achten und das Programm sollte auch richtig arbeiten.
 
Zuletzt bearbeitet:
Danke für die Begrüßung :D

Und auch vielen Dank, dass du dich so schnell mit meinem Problem befasst hast. Das Problem ist gelöst. Ich hab vllt. schon zu lang dran gesessen und diese Kleinigkeiten sind mir dann nicht mehr aufgefallen...

Zu deinem EDIT:
Danke für den Tipp, aber ich bin froh, dass alles so läuft wie ich es will und bevor ich jetzt wieder etwas umschreibe und ich häng dann an einer Stelle, will ich lieber erstmal ein lauffähiges Programm. Später kann ich das Programm ja immernoch verbessern :) (das wird wahrscheinlich sowieso nötig sein... :] )

Danke jedenfalls nochmal für deine schnelle Hilfe. Muss ich den Thread jetzt irgendwie als "gelöst" markieren oder so?

Gruß Devilness
 
Kein Ding, dafür sind wir ja da. Ja, also oben rechts einmal auf Erledigt klicken, dann sollte da ein Ja zu sehen sein. Damit wissen die anderen dann auch, dass das Problem gelöst wurde. Machen zwar die wenigsten, aber es hilft dennoch bei der Übersicht. Und die User freuen sich immer über ein Dankeschön oder eine Beitragsbewertung (Buttons sind immer unter dem Beitrag zu finden), wenn sie helfen konnten. Ist aber kein Zwang.
 
Zurück