# Daten aus Programm in XML Datei speichern



## twa (2. Feb 2011)

Hey Leute, hab ein Problem mit einem Programm, dass wir für die Schule machen sollen und zwar folgendes:
Wir mussten ein Programm schreiben in dem wir Logs speichern d.h. Mit Datum, Nachricht und User bzw. System.. 
Diese Logs werden in einer Liste während der Laufzeit gespeichert. Jetz haben wir zusätzlich noch die aufgabe bekommen, dass wir einen Save Button erstellen der diese Liste in eine XML Datei speichert. Meine Frage dabei ist jetzt: Könnte mir irgentwer freundlicherweise eine Klasse erstellen die mir meine Liste in ein XML Dokument speichert?

Hier mein bestehendes Programm:

Datenklasse-ENTRY:


```
package system_logging_tool;

import java.util.GregorianCalendar;

public class Entry {

    private GregorianCalendar gc;
    private String text;

    public Entry() {
    }

    public GregorianCalendar getGc() {
        return gc;
    }

    public void setGc(GregorianCalendar gc) {
        this.gc = gc;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}
```

Datenklasse-SYSTEMENTRY

```
package system_logging_tool;

public class SystemEntry extends Entry{

    private String system;

    public SystemEntry() {
    }

    public String getSystem() {
        return system;
    }

    public void setSystem(String system) {
        this.system = system;
    }

    @Override
    public String toString() {
        return (system + " : " + getGc().getTime());
    }
}
```

Datenklasse-USERENTRY


```
package system_logging_tool;

public class UserEntry extends Entry{

     private String user;

    public UserEntry() {
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;

    }

    @Override
    public String toString() {
        return (user + " : " + getGc().getTime());
    }
}
```

GUI


```
public class SystemLogFrame extends javax.swing.JFrame {

    GregorianCalendar gc = new GregorianCalendar();

    DefaultComboBoxModel sysCombo = new DefaultComboBoxModel (new String[] {"System1", "System2", "System3"});
    DefaultComboBoxModel usrCombo = new DefaultComboBoxModel (new String[] {"User1", "User2", "User3"});
    Boolean systemMode = true;
    DefaultListModel dlm = new DefaultListModel();
    ArrayList text = new ArrayList();

private void onNewSystemLog(java.awt.event.ActionEvent evt) {                                
        jComboBox1.setModel(sysCombo);
        gc = new GregorianCalendar();
        tfDate.setText(gc.getTime().toString());
        systemMode = false;
    }                               

    private void onUser(java.awt.event.ActionEvent evt) {                        
        jComboBox1.setModel(usrCombo);
        gc = new GregorianCalendar();
        tfDate.setText(gc.getTime().toString());
        systemMode = false;
    }                       

    private void onSave(java.awt.event.ActionEvent evt) {                        
        if(systemMode == true )
        {
            SystemEntry se = new SystemEntry();
            se.setGc(gc);
            se.setSystem(jComboBox1.getSelectedItem().toString());
            text.add(jTextArea1.getText());
            dlm.addElement(se);
        }else{
            UserEntry ue = new UserEntry();
            ue.setGc(gc);
            ue.setUser(jComboBox1.getSelectedItem().toString());
            text.add(jTextArea1.getText());
            dlm.addElement(ue);
        }
        jTextArea1.setText("");
        tfDate.setText("");
    }                       

    private void printToConsole(java.awt.event.ActionEvent evt) {                                
        for (int i = 0; i < dlm.getSize(); i++) {
            System.out.println(""+dlm.get(i)+" : "+text.get(i));
        }
    }                               

    private void onClick(java.awt.event.MouseEvent evt) {                         
        int index = jListSummary.getSelectedIndex();
        int num=0;
        String object = dlm.get(index).toString();
        String type = object.substring(0, 6);
        if(type.equals("System"))
        {
            num = Integer.parseInt(object.valueOf((object.charAt(6))));
            switch(num)
            {
                case 1:jComboBox1.setModel(new DefaultComboBoxModel (new String[] {"System1"}));break;
                case 2:jComboBox1.setModel(new DefaultComboBoxModel (new String[] {"System2"}));break;
                case 3:jComboBox1.setModel(new DefaultComboBoxModel (new String[] {"System3"}));
            }
            tfDate.setText(object.substring(10, 38));
        }
        else
        {
            switch(num)
            {
                case 1:jComboBox1.setModel(new DefaultComboBoxModel (new String[] {"User1"}));break;
                case 2:jComboBox1.setModel(new DefaultComboBoxModel (new String[] {"User2"}));break;
                case 3:jComboBox1.setModel(new DefaultComboBoxModel (new String[] {"User3"}));
            }
            num = Integer.parseInt(object.valueOf((object.charAt(4))));
            tfDate.setText(object.substring(8, 36));
        }
        jTextArea1.setText(text.get(index).toString());
    }
```

Programmiert habe ich das ganze in Netbeans 6.9.1, anbei noch ein Screenshot der GUI


----------



## fastjack (2. Feb 2011)

Da gibt es verschiedene Möglichkeiten, z.B.:

1. per Hand. Traversiere durch die Liste mit Logs und erzeuge dabei XML in einem StringBuffer oder so. Anschließend speichern, fertig.
2. mit DocumentBuilder. Durch traversieren der Liste mit den Logs den DocumentBuilder füttern, anschließen speichern, fertig.
3. JAXB oder EMF benutzen.

Für diese kleine Aufgabe würde ich eher 1. oder 2. favorisieren, whl. eher 1.


----------



## twa (2. Feb 2011)

Danke für die schnelle Antwort!
Wir müssen die XML Datei laut Angabe vom Lehrer mit dem DocumentBuilder machen und das in einer Klasse EntryListBuilder .. 
Da wir eig. noch nicht viel bezüglich XML gelernt haben ist das alles noch etwas unklar für mich, darum wärs echt nett wenn mir wer so eine Klasse machen könnte und ich mich damit auseinandersetzen könnte, würde mir glaub ich am meisten helfen aus dem Quellcode zu lernen


----------

