SAX XML file in array lesen

xxTejaxx

Mitglied
hallo, habe folgendes problem:

meine xml file hat grob diesen aufbau:
Code:
<-- save.xml -->
<root>
    <data>
        <Index>1</Index>
        <DeleteFlag>0</DeleteFlag>
        <value1>5763</value1>
        <value2>5</value2>
        <value3>typ1</value3>
    </data>
    <data>
        <Index>2</Index>
        <DeleteFlag>1</DeleteFlag>
        <value1>1234567</value1>
        <value2>5</value2>
        <value3>typ1</value3>
    </data>
</root>

nun moechte ich dies in der datei helpers.java in ein 2dim array, mit hilfe von Sax, lesen, also grob in dieser form:
Code:
<-- helpers.java -->
<--description node-->
string[][] array;

array[1][DeleteFlag] = 0
array[1][value1] = 5763
array[1][value2] = 5
array[1][value3] = typ1
array[2][DeleteFlag] = 1
array[1][value1] = 1234567
array[1][value2] = 5
array[1][value3] = typ1

damit ich dann die einzelnen daten des arrays in verschiedensten funktionen ansprechen kann.

hoffe hab mich einigermaßen verstaendlich ausgedrueckt ^^ bin schon etwas stark wie wirr *g*

danke
 
Warum willst du das denn in ein Array einlesen? Wären eigene Klassen-Objekte nicht schöner?

Wo ist denn jetzt dein Problem? Dass du nicht weißt wie man SAX benutzt?

(Habe das mal ins Java Forum verschoben)
 
Warum willst du das denn in ein Array einlesen? Wären eigene Klassen-Objekte nicht schöner?
warum in ein array? weil das in meiner einfach strukturierten vorstellung dann ganz gut ansprechbar ist ^ ^
lasse mich aber gern eines besseren belehren

Wo ist denn jetzt dein Problem? Dass du nicht weißt wie man SAX benutzt?

koennte man so ausdruecken, bin schon den halben tag auf der suche nach nem verstaendlichem beispiel, dass meinem xml_document aehnelt. aber irgendwie find ichs nicht :(
habe auch schon in diversen tutorials gesucht doch meist wird der einzelne node immer nur direkt in ne wiedergabe gepackt, ich brauch den spass jedoch als variablen oder aehnliches.
habe halt im spaeteren verlauf des programmes eingabemasken die mit werten aus der xml vorbefuellt werden sollen
 
Hier wird es immer gerne gesehen, wenn man schon ein wenig vorarbeit leistet. Also versuch einfach mal was. Wenn ich dir zeige wies geht lernst du wesentlich weniger.

Auf jeden Fall würde ich eine Bean erstellen für die Werte:
Java:
public class Data {
     private String index;
     private String deleteFlag;
     private String value1;
     private String value2;
     private String value3;

//Entsprechende Getter und Setter dafür
}

String nur weil ich nicht weiß um was es sich konkret handelt.

Dann erstellst du dir halt Objekte von dieser Klasse und setzt darauf die Daten aus der XML-Datei. Die Objekte kannst du dann in eine ArrayList packen. Das ist dann denke ich ein wenig schöner als ein Array zu verwenden, da vertut man sich zu leicht mit den Indices für die Zugriffe.
 
ok, so siehts nun aus:

Code:
//data.java
public class data {
private String index;
    private String DeleteFlag;
    private String LizenzName;
         .......................
public data(String index, 
                String DeleteFlag, 
                String LizenzName, 
          .......................){
                 this.index = index;
                this.DeleteFlag = DeleteFlag;
                this.LizenzName = LizenzName;      
      ..............................}
 public String getindex(){
        return index;
    }
    public void setindex(String index){
        this.index = index;
    }
    public String getDeleteFlag(){
        return DeleteFlag;
........................
}
Code:
//XmlData.java
import java.util.logging.*;
import java.io.*;
import java.util.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;


public class XmlData {
    private Document dom;    
    private List<data> myData = new ArrayList<data>();
    
    public XmlData() {
        myData = new ArrayList<data>();
        parseXmlFile();
        parseDocument();
    }
    
    private void parseXmlFile() {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
         DocumentBuilder db = dbf.newDocumentBuilder();
         dom = db.parse("save.xml");
      }
      catch (ParserConfigurationException pce) {
           pce.printStackTrace();
       } 
        catch (SAXException se) {
            se.printStackTrace();
        } 
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
    
    }
    
    private void parseDocument() {
        Element dataElement = dom.getDocumentElement();
        NodeList nl = dataElement.getElementsByTagName("data");
        if (nl != null && nl.getLength() > 0) {
            for (int i = 0; i < nl.getLength(); i++) {
                Element el = (Element) nl.item(i);
                data d = getdata(el);
                myData.add(d);
            }
        }
    }
    
        private String getTextValue(Element ele, String tagName) {
        String textVal = null;
        NodeList nl = ele.getElementsByTagName(tagName);
        if (nl != null && nl.getLength() > 0) {
            Element el = (Element) nl.item(0);
            textVal = el.getFirstChild().getNodeValue();
        }

        return textVal;
    }
        
    private data getdata(Element dataElement) {
       String index = getTextValue(dataElement, "Index");
       String DeleteFlag = getTextValue(dataElement, "DeleteFlag");
       String LizenzName = getTextValue(dataElement, "LizenzName");
        ...........................................
       data d = new data(   index, 
                            DeleteFlag, 
                            LizenzName,
         .......................);
    return d;
}}

Code:
//Helpers.java
public static void settable(){
      data[] dummy = new XmlData();
}

so und im letzten statement hab ich nun n prob
nach meinem empfinden muesste ja XmlData() ein element der classe data zurueckliefern, macht es aba nich, fehlermeldung incompatible datatypes.
und ne iteration durch das gesammte array fehlt mir auch noch
komm ich da mit
Code:
for (data dummy : myData) {
            /* if dummy == table columnheader then{
            fill into tableset xxx dummy} */
        }
grob durch? (also jetzma in pseudocode)
 
Zuletzt bearbeitet:
Wie kommst du darauf dass MyData ein Objekt Data zurückgeben sollte? Insbesondere der Konstruktor? Du hast die Daten doch in einer Liste drin. Du solltest ein neues Objekt von XmlData anlegen, und dann darauf getData aufrufen, welches dir dann deine Liste zurückgeben sollte.

Achte bitte darauf dass in Java Klassen im groß geschrieben werden, also Data und dass Methoden und Felder in CamelCase geschrieben werden klein am Anfang, ansonsten jedes neue Wort groß. Also getIndex.

Das mit der for-Schleife sollte so funktionieren.
 
tasaechlich mene tabelle hat sich so gefuellt wie ich mir das vorgestellt habe *smile*

dicken fetten dank fuer die hilfe :)
 
Zurück