# Formulardaten in XML Datei speichern



## Tonsilgon (10. Nov 2014)

Hallo Zusammen,

ich bin ein XML Neuling. Habe aber schon ein bisschen JAVA Erfahrung.
Ich habe eine GUI Oberfläche geschrieben. Auf der GUI sind ein paar Textfelder enthalten.
Die Inhalte sollen natürlich zusammen abgespeichert werden und später unter einer ID oder einem Namen wieder aufgerufen werden können. 
Könnt ihr mir helfen, wie ich das ganze am besten realisiere? Ich les immer DOM, SAX,... weiss jetzt aber nicht genau was ich brauche. 
Für mich wäre es zumind. schon ein Erfolg wenn ich die Textfelder in die XML Datei bekomme. 

Danke schon mal für eure Hilfe. 

Viele Grüße
Tonsil


----------



## JavaMeister (10. Nov 2014)

Also es gibt DOM und SAX. Da hätte man ja die Zeit invenstieren können, um zu schauen, wo die unterschiede sind. (WikiPedia Link überlasse ich dem Leser).

Du musst zunächst deine Daten in ein Datenmodell bringen. Dann 20 Sekunden google:

https://docs.oracle.com/javase/tutorial/jaxp/xslt/writingDom.html

Beim überführen des Models in DOM kann ich Dir helfen, wenn ich das Model sehe.


----------



## Tonsilgon (10. Nov 2014)

Danke schon mal für deine Antwort. 
Ich habe mich für DOM entschieden. Soweit ich das beurteilen kann. 
Mit Datenmodell meinst du den Aufbau der XML Datei?


----------



## JavaMeister (10. Nov 2014)

Deine Bean-Klassen. Du musst ja von irgentwoher die Daten in das DOM packen. Am besten eben von einer Bean.


----------



## Tonsilgon (10. Nov 2014)

Okay meine Bean-Klasse sieht so aus:


```
public Anlegen() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        TextBez = new javax.swing.JTextField();
        TextKontext = new javax.swing.JTextField();
        TextName = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Bitte fügen Sie zu alle Elementen eine Beschriftung ein");

        jPanel1.setBackground(new java.awt.Color(0, 255, 102));
        jPanel1.setForeground(new java.awt.Color(255, 102, 51));

        jLabel4.setText("Bezeichnung");

        jLabel3.setText("Kontext");

        jLabel2.setText("Name");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel4)
                    .addComponent(jLabel3)
                    .addComponent(jLabel2))
                .addGap(80, 80, 80)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(TextBez, javax.swing.GroupLayout.DEFAULT_SIZE, 94, Short.MAX_VALUE)
                    .addComponent(TextName)
                    .addComponent(TextKontext))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(TextBez, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(TextKontext, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(TextName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(37, Short.MAX_VALUE))
        );

        jButton1.setText("Speichern");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(101, 101, 101)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(62, 62, 62)
                        .addComponent(jButton1)))
                .addContainerGap(122, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(75, 75, 75)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(31, 31, 31)
                        .addComponent(jButton1)))
                .addContainerGap(103, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }
```

ist leider so viel da ich es in NetBeans zusammengebaut habe. Aber zusammengefasst gibt es im Moment 3 TextFelder und einen "Speichern" Button. Und wenn dieser gedrückt wird soll der Inhalt der Felder in ein XML Doc geschrieben werden. Ist das die Antwort auf deine Frage? 
Ich bin so dankbar das du mir hilfst  :toll:


----------



## dzim (20. Nov 2014)

Nur um noch etwas in den Raum zu werfen: Etwas übersichtlicher wird es vielleicht mit ORM (ObjektRelationalen Mappern). In Java selbst gibt es JAXB mit dem du deine Modellklassen (Beans) so annotieren kannst, dass ein Marshaller/Unmarshaller sie schreiben/lesen kann. Du musst dann nur noch ein kurzes Snippet für diese Aktionen schreiben und musst nicht extra noch ein XML parsen oder per Hand aufbauen. Google vielleicht mal nach JAXB wenn es dir passt. (Vorteil ist auch, das man das Modell aus einem Schema heraus erstellen kann.)


----------

