Announcement

Collapse
No announcement yet.

Iterationen einer XML-Datei in einem Objekt sichern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Iterationen einer XML-Datei in einem Objekt sichern

    Hallo zusammen,

    ich habe eine Struktur, welche ich durch einfache Klassen mit Klassenvariablen abgebildet habe:

    Code:
    HauptStruktur:
    
    public class HauptStruktur {
    	
    	public HeaderTyp HeaderObj;
    	public String mainPart1;
    	public String mainPart2;
    	public String mainPart3;
    	public String mainPart4;
    	public String mainPart5;
    	public String mainPart6;
    
    	
    }

    Code:
    Header:
    
    public class HeaderTyp {
    	
    	public String Titel; 
    	public String Encoding; 
    	public String Sprache; 
    }


    Code:
    SpezialTyp:
    
    public class SpezialStruktur extends HauptStruktur {
    	public String spez1;
            public String spez2;
            public String spez3;
            public String spez4;
    	public String spez5;
    }
    Nun ist mein Problem, das ich in diesen "Eigenschaften" Werte eintragen muss.
    Allerdings sind die "Eigenschaften" des Headers immer gleich und über der Klasse SpezialStruktur müssen immer wieder neue Werte reingeschrieben werden - genauer bei Jeder Iteration:
    Code:
    ...
    SpezialTyp sp = new SpezialTyp();
    sp.Titel = treffer.getValue("treff:titel");
    sp.Encoding = treffer.getValue("treff:encoding");
    sp.Sprachel = treffer.getValue("treff:sprache");
    while (treffer != null) {
    
    			sp.spez1 = treffer.getValue("treff:wert1");
    			sp.spez4 = treffer.getValue("treff:wert4");
    			sp.spez5 = treffer.getValue("treff:wert5");
    			sp.mainPart1 = treffer.getValue("treff:mainWert1");
    			sp.mainPart3 = treffer.getValue("treff:mainWert3");
    
    			// Output a summary of the hit:
    			System.out.println("Title : " + hit.getTagValue("autn:title"));
    			System.out.println("Reference: "
    					+ hit.getTagValue("autn:reference"));
    			System.out.println("Weight : " + hit.getTagValue("autn:weight")
    					+ "\tdatabase: " + hit.getTagValue("autn:database"));
    			System.out.println("Summary : "
    					+ hit.getTagValue("autn:summary") + '\n');
    			// Go to the next hit:
    			hit = hit.next("autn:hit");
    		}
    Ich iteriere dabei über eine XML-Datei, die Methode zum Iterieren selber ist schon gegeben.

    Mein Problem ist, wie ich jetzt effektiv alle Werte in einem Objekt speichere.
    Wie muss ich meine Klassen anpassen, damit es funktioniert?
    Ich hatte schon an einer ArrayList() gedacht, allerdings stehe ich gerade auf dem Schlauch und mir erschließt sich garnichts mehr


    Ich hoffe einer von euch kann mir weiter helfen :-)



    Beste Grüße, itachy

  • #2
    Hallo itachy,

    erstmal ein bischen Theorie:

    Du hast in deinen Typklassen keine Klassenvariablen deklariert, sondern Instanzvariablen. Klassenvariablen werden mit dem Schlüsselwort static deklariert. Sie sind ohne die Erzeugung einer Instanz dieser Klasse (bspw. new SpezialStruktur()) direkt benutzbar und sind für alle Instanzen gleich.

    Instanzvariablen sind nur nach Erzeugung einer Instanz über diese Instanz zugreifbar, also
    sp1 = new SpezialStruktur()
    sp2 = SpezialStruktur().
    Das ist das, was Du gemacht hast. Und das ist für Deinen Anwendungsfall glaube ich auch richtig so.

    Und nochwas, veränderliche variablen (also ohne "final" davor) macht man nie nie nie public. Die werden immer vor Direktzugriff geschützt und der Zugriff darauf erfolgt über Methoden (i.d.R. getXXX und setXXX).

    Und nun zu Deiner Frage:
    In dem von Dir geposteten Code gibt es genau einen treffer, dessen Werte genau einer Instanz von Spezialtyp zugewiesen werden. Aus der while-Schleife werde ich nicht schlau. Wenn treffer null wäre, hättest Du schon weiter oben eine NullPointerException kriegen müssen. Wenn treffer aber nicht null ist, hast Du eine Endlosschleife, weil treffer innerhalb der Schleife nie verändert wird. Also nehme ich mal an, dass das kein Code ist, der läuft, sondern Code, mit dem Du beschreiben wolltest, was passieren soll. Das kann ich aus dem Code aber nicht erkennen.

    Deswegen meine Gegenfrage: Du hast eine Menge von Treffern, die Du in eine Menge von Spezialtypen überführen willst und weißt nicht so recht wie. Ist das richtig?

    Gruß ngomo
    http://www.winfonet.eu

    Comment


    • #3
      Crosspost

      http://www.java-forum.org/allgemeine...t-sichern.html
      Christian

      Comment


      • #4
        Ja stimmt

        Moin Christian,
        ja das nervt natürlich. Aber bei den Antworten, die er dort bekommen hat , kann ich es ihm nicht verübeln, dass er hier nochmal vorbeischaut .
        Reflection.... ts ts ts. Danke jedenfalls, dass Du den Thread noch nicht gelocked hast.
        Gruß ngomo
        http://www.winfonet.eu

        Comment


        • #5
          Er hat dort nur 2 Min später gepostet....

          Außerdem ist da ja was völlig durcheinander

          Einmal heisst die Klasse SpezialTyp, ist definiert als SpezialStruktur im Code wieder SpezialTyp???

          Wie gsagt ist die Schleife Murks...

          Das hätte so die IDE schon anmeckern müssen

          Ich habe das konfuse nicht genau verstanden, aber wenn ich einen Header oder was auch immer haben und darunter x-andere Teilklassen, wäre für mich die Lösung

          class Header
          ArrayList<Teilwerte>

          Bei jedem Durchlauf wird eine neue Instanz Teilwert angelegt und der Liste hinzugefügt.
          Zuletzt editiert von Christian Marquardt; 02.09.2010, 17:20.
          Christian

          Comment

          Working...
          X