SAX Parser implementieren

m11

Mitglied
Guten Abend,

ich muss einen SAX Parser implementieren, der alle XML Files mit folgendem Aufbau parsen kann:

Java:
<?xml version="1.0" encoding="UTF-8"?><blumen>
    <narzisse>
        <bluetezeit>2</bluetezeit>
        <farbe>weiss</farbe></narzisse>
    <rose>
        <preis>1</preis>
        <bluetezeit>3</bluetezeit>
        <farbe>rot</farbe></rose>
    <tulpe>
        <preis>1</preis>
        <bluetezeit>1</bluetezeit>
        <farbe>rot</farbe></tulpe></blumen>

Mein Parser sieht bisher so aus:

Java:
class BlumenHandler extends DefaultHandler {    
    private Blumenladen bl;
    private Blume blume;
    private String text;
    
    public Blumenladen getBlumenladen() {
        return bl;
    }
    
    public void startDocument() {
        bl = new Blumenladen();
    }
    
    public void startElement(String namespaceURI, String localName,
            String qName, Attributes atts) {
        
        if (qName.equals("narzisse")) 
            blume = new Narzisse();
            
        if (qName.equals("rose")) 
            blume = new Rose();
        
        if (qName.equals("tulpe"))
            blume = new Tulpe();
        
        
    }
    
    public void characters(char[] chs, int start, int length) {
          text = String.valueOf(chs, start, length);
    }
    
    public void EndElement(String namespaceURI, String localName, String qName) {
            
            if (qName.equals("bluetezeit"))
                blume.setBluetezeit(Integer.parseInt(text));
            
            if (qName.equals("farbe"))
                blume.setFarbe(Farbe.valueOf(text));
            
            if (qName.equals("preis"))
                    blume.setPreis(Double.parseDouble(text));
            
            if (qName.equals("narzisse") || qName.equals("rose") || qName.equals("tulpe"))
                bl.addBlume(blume);
                    
    }
}

Zugrunde liegen eine Klasse Blumenladen:
Java:
public class Blumenladen implements Iterable<Blume> {


    //Liste, um alle vorhandenen Blumen im Laden zu speichern
    private LinkedList<Blume> blumenbestand;


    public Blumenladen(){
        blumenbestand = new LinkedList<Blume>();
    }


    //Methode um eine Blume dem Blumenbestand hinzuzufuegen
    public void addBlume(Blume b){
        blumenbestand.add(b);
    }


    //Methode, um eine Blume aus dem Blumenbestand zu loeschen
    public void removeBlume(Blume b){
        blumenbestand.remove(b);
    }




    @Override
    public String toString(){
        return blumenbestand.toString();
    }


    
@Override
public Iterator<Blume> iterator() {
        return blumenbestand.iterator();
    }
}

und eine abstrakte Klasse Blumen:

Java:
public abstract class Blume {


    public abstract void setPreis(double preis);
    public abstract void setFarbe(Farbe farbe);
    public abstract void setBluetezeit(int bluetezeit);
}

Die Klassen Narzisse, Tulpe und Rose erben von BLume und spezifizieren die Typen.

Des Weiteren gibt es für die Farbe der Blumen:
Java:
public enum Farbe {
    ROT,ORANGE,WEISS,GELB,ROSA
}

Ich hoffe das reicht zum Verständnis.
Ziel ist es, die Blumen aus dem XML File auszulesen und in der LinkedList in zu speichern. Diese möchte ich dann später ausgeben können.

Java:
public class MeinSaxBlumenladen {


    public static void main(String [] args) throws Exception {
        
        //Eingabe des Pfads als Kommandozeilenargument                         
System.out.println("Bitte den Dateipfad angeben: ");
        Scanner sc = new Scanner(System.in);
        String eingabe = sc.nextLine();
        
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();
        BlumenHandler handler = new BlumenHandler();
        saxParser.parse(new File(eingabe), handler);
        Blumenladen blumenladen = handler.getBlumenladen();
    
        
    
        System.out.println(blumenladen.toString());
        
        }
    }
 

knilch

Bekanntes Mitglied
Hi,
In deiner Klasse:
Java:
class BlumenHandler extends DefaultHandler {  
   public void EndElement(String namespaceURI, String localName, String qName) {
        ...;
    }
}
eine solche Methode gibt es in der DefaultHandler- Klasse nicht. https://docs.oracle.com/javase/7/docs/api/org/xml/sax/helpers/DefaultHandler.html
Wenn du statt dessen folgende Methode nimmst, dann sollte es gehen:
Java:
   public void endElement(String uri, String localName, String qName) {
      ...;
   }
Für die Farbe wirst du mit deiner Enum ein Fehler erhalten. Versuch es mal so:
Java:
public enum Farbe {
    ROT("rot"),
    ORANGE("orange"),
    WEISS("weiss"),
    GELB("gelb"),
    ROSA("rosa");

    private String text;

    Farbe(String text) {
        this.text = text;
    }

    public String getText() {
        return this.text;
    }

    public static Farbe fromString(String text) {
        if (text != null) {
            for (Farbe farbe : Farbe.values()) {
                if (text.equalsIgnoreCase(farbe.text)) {
                    return farbe;
                }
            }
        }
        return null;
    }
}
Dann im Code:
Java:
...
blume.setFarbe(Farbe.fromString(text));
...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L DOM Parser Implementieren XML & JSON 9
pkm Gibt es XML-Parser-Bibliotheken XML & JSON 3
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
MiMa SAX-Parser beenden? XML & JSON 5
K GSON-Parser XML & JSON 6
K XML-Parser vs. XLST XML & JSON 4
E Gibt es denn einen XML-Parser für JUnit-Tests? XML & JSON 6
D XSD Parser XML & JSON 1
T Neuer XML Parser!!! XML & JSON 33
J XML Parser anhand xsd erzeugen XML & JSON 2
H SAX Parser optimieren XML & JSON 5
H Sax Parser verschluckt teile XML & JSON 11
C XML SAX Parser XML & JSON 10
R Handler-Wechsel, SAX Parser bricht nach 8192 Byte ab XML & JSON 5
B SAX-Parser - Dokumente einlesen und in einer Map ablegen XML & JSON 2
S Sax Parser Performance XML & JSON 2
M Eigener XML-Parser XML & JSON 1
S Typsicherer HTML-Parser XML & JSON 5
S HTML Parser XML & JSON 2
B Parser und Fabrik XML & JSON 6
F SAX Parser siehe nichts auf dem Konsole weder eine Fehlermeldung noch eine Ergebnis XML & JSON 6
enne87 SAX-Parser XML & JSON 5
C Mit SAX Parser XML Attribute auswerten XML & JSON 3
H XML-Parser: geparste Strings in Konstruktor? XML & JSON 9
S DOM Parser XML & JSON 12
S Sax Parser XML & JSON 3
D Speicherüberlauf bei character-Methode mit SAX-Parser XML & JSON 3
Y Welchen XML Parser / Klassen aus XSD generieren lassen XML & JSON 4
H Brauche ich einen speziellen XML-Parser? XML & JSON 2
M Unhierarchisches XML-File mit DOM-Parser auswerten XML & JSON 5
G XML Parser Fehler, zwei gleiche kind-Elemente XML & JSON 7
S Welcher XML-Parser am besten? XML & JSON 4
S Parser XML & JSON 2
S JAVA XML Parser der einen String parst XML & JSON 3
Noar XML-Parser mit GUI? XML & JSON 2
R Problem mit SAX-Parser characters() XML & JSON 7
K SAX Parser Character Puffer zu klein XML & JSON 2
B Mit Sax-Parser validieren XML & JSON 7
Wildcard xpath Parser XML & JSON 8
O JAXB generierte Klassen sollen Serializable implementieren XML & JSON 1
J Kann ich das so implementieren? XML & JSON 10

Ähnliche Java Themen

Neue Themen


Oben