*.csv Datein in XML konvertieren

danke dir vielmals für deine Hilfe.
Es wundert mich aber immer noch warum es mit der anderen Klasse nicht funktioniert hat.
Immerhin hat er es in der Console richtig ausgegeben.
Naja ich schau es mir noch an und falls ich was finde poste ich es.

Nochmal herzlichen dank.
Gruß
Serpil
 
Hallo,

also es ist keine Musterlösung, aber es ist eine die funktioniert. :) Auf jeden Fall müsstest du jetzt weiter kommen. Achja, meine letzte Lösung hat jeztt nicht funktioniert, weil ich einen Fehler hatte. Hatte
Code:
writer.close()
vergessen *schäm*

MFG
 
Zuletzt bearbeitet:
Na deshalb hab ich ja noch mal die Klassen richtig gepostet. Hatte ja an deiner Klasse auch noch mal was geändert.
 
Also hab wieder ein Problem mit meinem Programm. Wäre super wenn mir jemand behilflich sein könnte. Also es geht um folgendes.
Ich versuche ein Xml Dokument zu erstellen in dieser Form:
Code:
<root>
	<element 1>
		<element 2>
		</element 2>

		<element 2>
		</element 2>
	</element 1>
</root>

aber leider kriege ich diese Hirarchie raus

Code:
<root>
	<element 1>
		<element 2>
		</element 2>
	</element 1>
	
	<element 1>
		<element 2>
		</element 2>
	</element 1>
</root>

hänge nochmal meinen Code mit an weil ich einiges geändert habe.
Code:
import java.io.*;
import javax.xml.parsers.*;

import org.w3c.dom.*;

public class Converter 
{
	static Document document;
	static String[] list;
	String[] head ;	
	String[] name;
	
	public static void main(String string[]) 
	{
		Converter demo = new Converter("C:/temp/test.xml");
		demo.createXMLBasic();
		demo.loadCSV("C:/temp/test.csv");
		demo.saveXML("C:/temp/test.xml");
	}
	public Converter(String string) 
	{
		newXMLFile(string);
	}
	
	public void newXMLFile(String string) 
	{
		try 
		{
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			document = builder.newDocument();
		} 
		catch (ParserConfigurationException pce)
		{
			pce.printStackTrace();
		} 
		catch (Throwable t) 
		{
			t.printStackTrace();
		}
	}

	public void createXMLBasic()
	{			
		Element root = document.createElement("TestTest");
		document.appendChild(root);
	}
	
	public void loadCSV(String string) 
	{
		// Methode zum Laden von CSV
		String line = "";
		try 
		{
			FileReader inputStream = new FileReader(string);
			BufferedReader input = new BufferedReader(inputStream);
						
			if((line = input.readLine()) != null)
			{
				if(line.contains("#"))
					line = line.substring(1);
				
				name = line.split(";");
				
				if ((line = input.readLine()) != null) 
				{
					head = line.split(";");
					
					while ((line = input.readLine()) != null) 
					{					
						list = line.split(";");
						addData(list);						
					}				
				}	
			}			

			while (line != null)
				;
			input.close();
		} 
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	public void addData(String[] data)
	{		
		Element root = document.getDocumentElement();
		try 
		{	
			Element gattung = document.createElement("Test");
			root.appendChild(gattung);
						
			Element zero = document.createElement(name[0]);
			gattung.appendChild(zero);
			
			for (int i = 0; i < data.length; i++) //ArrayIndexOutOfBoundsException --> head[19] != data[18] ?
			{				
				Element element = document.createElement(head[i]);
				zero.appendChild(element);	
				element.appendChild(document.createTextNode(data[i])); 
			}			
		}
		catch (DOMException ex)
		{
			ex.printStackTrace();
		}
	}	

	public void saveXML(String string)
	{
		try 
		{
			XMLOutputterNeu outputter = new XMLOutputterNeu();
			outputter.output(document, new FileOutputStream(string));
		} 
		catch (IOException e) 
		{
			e.printStackTrace();
		}
	}
}


Code:
import java.io.*;
import org.w3c.dom.*;

public class XMLOutputterNeu
{
	public void output(Document document, OutputStream out) 
	{
		PrintWriter writer = new PrintWriter(out);
		travers(document, writer);
		writer.close();
	}

	private void travers(Node node, PrintWriter out) 
	{
		switch (node.getNodeType()) 
		{
		case Document.DOCUMENT_NODE:
			NodeList list = node.getChildNodes();
			out.println("<?xml version='1.0' encoding='UTF-8'?>");
			for (int i = 0; i < list.getLength(); i++) 
			{
				travers(list.item(i), out);
			}
			break;
			
		case Document.ELEMENT_NODE:
			list = node.getChildNodes();
			out.println("<" + node.getNodeName() + ">");
			for (int i = 0; i < list.getLength(); i++) 
			{
				travers(list.item(i), out);
			}
			out.println("</" + node.getNodeName() + ">");
			break;
			
		case Document.TEXT_NODE:
			out.println(node.getNodeValue());
			break;
		}
	}
}
Bin für jede noch so kleine Hilfe dankbar.
Gruss
 
Hallo,

Könntest du bitte mal eine CVS-Beispieldatei posten und sagen was zusammen in ein Element soll?

MFG

zEriX
 
Code:
#ZEROBOND
EMITTENT;FAELLIGKEIT;FINANZPLATZ;INTERN;NAME;RUECKZAHLUNGSKURS;TEILMARKT;USANCE;VALUTATAGE;WAEHRUNG;WPRKENNUMMER;EMISSIONSDATUM;EMISSIONSRENDITE;ISIN;REIHE;ERSTELLUNGSDATUM;LGD_KONFIGURATION;LGD_KLASSE;GAT_KOMMENTAR
BASF AG;24.04.2002;Frankfurt;PIA11042007164749937zb;Zerobond-0019;6,3000000000;IHS;ICMA-251;2;EUR;ZO0019;01.01.2000;0,0000000000;ZERO-0000019;;11.04.2007;ungenutzt;ungenutzt;
BASF 
AG;24.04.2002;Frankfurt;PIA11042007164749937zb;Zerobond-0019;6,3000000000;IHS;ICMA-251;2;EUR;ZO0019;01.01.2000;0,0000000000;ZERO-0000019;;11.04.2007;ungenutzt;ungenutzt;

Das ist meine csv datei.
und es soll so aussehen
Code:
<sDISPlusImport>
	<IGattung>
	         <ZEROBOND>
                </ZEROBOND>
                
                <ZEROBOND>
                </ZEROBOND>
	</IGattung>
</sDISPlusImport>

Die ersten beiden elemente bleiben immer gleich.
Nur das Element <Zerobond> ändert sich und muss aus der csv datei herausgelesen werden.
Gruss Serpil
 
Also nur zum Verständis, das was hinter '#' steht wird das Parent-Element für die Daten die in der CVS-Datei stehen, oder?
 
ja genau.. Ich häng dir nochmal die richtige datei an.
so sollte es aussehen:

Code:
<?xml version="1.0" encoding="UTF-8"?>
<sDISPlusImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="import.xsd">
	<IGattung>
		<IZerobond>
			<produkt>Zerobond</produkt>
			<isin>DE4711</isin>
			<wkn>4711</wkn>
			<bezeichnung>bezeichnung</bezeichnung>
			<kurzbezeichnung>kurzbezeichnung</kurzbezeichnung>
			<teilmarkt>Swap</teilmarkt>
			<waehrung>EUR</waehrung>
			<landiso>DEU</landiso>
			<branche>Bau</branche>
			<valutaregel>0</valutaregel>
			<finanzplatz>Frankfurt</finanzplatz>
			<emittent>emittent</emittent>
			<boersennotiert>EU regulated markets</boersennotiert>
			<kursversorgt>true</kursversorgt>
			<faelligkeit>2001-01-01</faelligkeit>
			<rueckzahlungskurs>100.0</rueckzahlungskurs>
			<emissionsdatum>2001-01-01</emissionsdatum>
		</IZerobond>
		<IZerobond>
			<produkt>Zerobond</produkt>
			<isin>DE4711</isin>
			<wkn>4711</wkn>
			<bezeichnung>bezeichnung</bezeichnung>
			<kurzbezeichnung>kurzbezeichnung</kurzbezeichnung>
			<teilmarkt>Swap</teilmarkt>
			<waehrung>EUR</waehrung>
			<landiso>DEU</landiso>
			<branche>Bau</branche>
			<valutaregel>0</valutaregel>
			<finanzplatz>Frankfurt</finanzplatz>
			<emittent>emittent</emittent>
			<boersennotiert>EU regulated markets</boersennotiert>
			<kursversorgt>true</kursversorgt>
			<faelligkeit>2001-01-01</faelligkeit>
			<rueckzahlungskurs>100.0</rueckzahlungskurs>
			<emissionsdatum>2001-01-01</emissionsdatum>
		</IZerobond>
	</IGattung>
</sDISPlusImport>

aber meins sieht so aus.

Code:
<?xml version='1.0' encoding='UTF-8'?>
<sDISPlusImport>
	<IGattung>
		<ZEROBOND>
			<EMITTENT> BASF AG </EMITTENT>
			<FAELLIGKEIT> 24.04.2002 </FAELLIGKEIT>
			<FINANZPLATZ> Frankfurt </FINANZPLATZ>
			<INTERN> PIA11042007164749937zb </INTERN>
			<NAME> Zerobond-0019 </NAME>
			<RUECKZAHLUNGSKURS> 6,3000000000 </RUECKZAHLUNGSKURS>
			<TEILMARKT> IHS </TEILMARKT>
			<USANCE> ICMA-251 </USANCE>
			<VALUTATAGE> 2 </VALUTATAGE>
			<WAEHRUNG> EUR </WAEHRUNG>
			<WPRKENNUMMER> ZO0019 </WPRKENNUMMER>
			<EMISSIONSDATUM> 01.01.2000 </EMISSIONSDATUM>
			<EMISSIONSRENDITE> 0,0000000000 </EMISSIONSRENDITE>
			<ISIN> ZERO-0000019 </ISIN>
			<REIHE> </REIHE>
			<ERSTELLUNGSDATUM> 11.04.2007 </ERSTELLUNGSDATUM>
			<LGD_KONFIGURATION> ungenutzt </LGD_KONFIGURATION>
			<LGD_KLASSE> ungenutzt </LGD_KLASSE>
		</ZEROBOND>
	</IGattung>
	<IGattung>
		<ZEROBOND>
			<EMITTENT> BASF AG </EMITTENT>
			<FAELLIGKEIT> 24.04.2002 </FAELLIGKEIT>
			<FINANZPLATZ> Frankfurt </FINANZPLATZ>
			<INTERN> PIA11042007164749937zb </INTERN>
			<NAME> Zerobond-0019 </NAME>
			<RUECKZAHLUNGSKURS> 6,3000000000 </RUECKZAHLUNGSKURS>
			<TEILMARKT> IHS </TEILMARKT>
			<USANCE> ICMA-251 </USANCE>
			<VALUTATAGE> 2 </VALUTATAGE>
			<WAEHRUNG> EUR </WAEHRUNG>
			<WPRKENNUMMER> ZO0019 </WPRKENNUMMER>
			<EMISSIONSDATUM> 01.01.2000 </EMISSIONSDATUM>
			<EMISSIONSRENDITE> 0,0000000000 </EMISSIONSRENDITE>
			<ISIN> ZERO-0000019 </ISIN>
			<REIHE> </REIHE>
			<ERSTELLUNGSDATUM> 11.04.2007 </ERSTELLUNGSDATUM>
			<LGD_KONFIGURATION> ungenutzt </LGD_KONFIGURATION>
			<LGD_KLASSE> ungenutzt </LGD_KLASSE>
		</ZEROBOND>
	</IGattung>
</sDISPlusImport>

die attribute brauchst du nicht zu beachten. die sind im moment zweitrangig.
Ich hab schon alles mögliche ausprobiert aber es funktioniert einfach nicht und ich komm auch nicht drauf woran es liegen könnte.
gruss
 
So, dein Fehler war, dass du immer wieder einen neues Element Namens "Test" angelegt hast.
Code:
public void addData(String[] data)
	{		
		Element root = document.getDocumentElement();
		try 
		{	
			Element gattung = document.createElement("Test");
			root.appendChild(gattung);

Hiermit müsste es jetzt funktionieren.
Code:
import java.io.*;
import javax.xml.parsers.*;

import org.w3c.dom.*;

public class Converter
{
  static Document document;
  static String[] list;
  String[] head ; 
  String[] name;
  
  public static void main(String string[]) 
  {
    Converter demo = new Converter();
    demo.createXMLBasic();
    demo.loadCSV("C:/temp/test.csv");
    demo.saveXML("C:/temp/test.xml");
  }
  public Converter() 
  {
    newXMLFile();
  }
  
  public void newXMLFile() 
  {
    try 
    {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();
      document = builder.newDocument();
    } 
    catch (ParserConfigurationException pce)
    {
      pce.printStackTrace();
    } 
    catch (Throwable t) 
    {
      t.printStackTrace();
    }
  }

  public void createXMLBasic()
  {     
    Element root = document.createElement("TestTest");
    document.appendChild(root);
  }
  
  public void loadCSV(String string) 
  {
    // Methode zum Laden von CSV
    String line = "";
    try 
    {
      FileReader inputStream = new FileReader(string);
      BufferedReader input = new BufferedReader(inputStream);
            
      if((line = input.readLine()) != null)
      {
        if(line.contains("#"))
          line = line.substring(1);
        
        name = line.split(";");
        
        if ((line = input.readLine()) != null) 
        {
          head = line.split(";");
          
          while ((line = input.readLine()) != null) 
          {         
            list = line.split(";");
            addData(list, "TestTest");            
          }       
        } 
      }     

      
      input.close();
    } 
    catch (IOException e)
    {
      e.printStackTrace();
    }
  }

  public void addData(String[] data, String gattungsID)
  {   
    Element root = document.getDocumentElement();
    try 
    { 
      Element gattung = (Element)document.getElementsByTagName(gattungsID).item(0);
      
      if(gattung == null){
        gattung = document.createElement(gattungsID);
        root.appendChild(gattung);
      }
            
      Element zero = document.createElement(name[0]);
      gattung.appendChild(zero);
      
      for (int i = 0; i < data.length; i++) //ArrayIndexOutOfBoundsException --> head[19] != data[18] ?
      {       
        Element element = document.createElement(head[i]);
        zero.appendChild(element);  
        element.appendChild(document.createTextNode(data[i])); 
      }     
    }
    catch (DOMException ex)
    {
      ex.printStackTrace();
    }
  } 

  public void saveXML(String string)
  {
    try 
    {
      XMLOutputterNeu outputter = new XMLOutputterNeu();
      outputter.output(document, new FileOutputStream(string));
    } 
    catch (IOException e) 
    {
      e.printStackTrace();
    }
  }
}



MFG

zEriX
 

Neue Beiträge

Zurück