wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun?

berserkerdq2

Bekanntes Mitglied
Java:
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
       
    }


    public void endElement(String uri, String localName, String qName) throws SAXException {
        // TODO
    }


Ich habe die API durchgelesen und kapiere jetzt noch weniger, ich habe eine XML Datei, aber was genau soll ich nun tun, für was ist dieser String uri, String localName, Stringqname und Attributes Atts??? Was genau soll ich damit den anfangen?
 
Beste Antwort
Wenn du SAX benutzt, musst du einiges selber tun.

Wenn du dagegen DOM bentutzt, wird dir vieles abgenommen; es wird aber das gesamte XML-Dokumnet auf einmal eingelesen und benötigt entsprechend viel Arbeitsspeicher.
Das sollte aber bei kleinen Dokumenten und dem heute verfügbaren Arbeitsspeicher kein Problem sein.
ich von jedem Internship, wovon ich ca. 1030 habe
Bei solchen Mengen sehe ich jedenfalls kein Problem.

httpdigest

Top Contributor
Schaue erstmal in die JavaDoc/Dokumentation des Interfaces https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html

Hier ist dann auch die Dokumentation der Methoden:
startElement(): https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)

endElement(): https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html#endElement(java.lang.String, java.lang.String, java.lang.String)

Das kann man als "Callback"-Methoden bezeichnen, denn der XML Parser ruft diese Methoden in einer von dir bereitgestellten Instanz einer Klasse, die ContentHandler implementiert, auf, um dich darüber zu benachrichtigen, dass der Parser gerade ein öffnendes XML-Tag oder ein schließendes XML-Tag gelesen hat.
Es erlaubt dir, basierend auf den in den Parametern übergebenen Informationen, diese Ereignisse zu verarbeiten.

Was genau soll ich damit den anfangen?
Es kommt jetzt halt darauf an, was du mit den Ereignissen "XML-Start-Tag bzw. End-Tag wurde gelesen" genau machen möchtest.
Also: Was willst du denn überhaupt tun?
 

berserkerdq2

Bekanntes Mitglied
Schaue erstmal in die JavaDoc/Dokumentation des Interfaces https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html

Hier ist dann auch die Dokumentation der Methoden:
startElement(): https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)

endElement(): https://docs.oracle.com/javase/7/docs/api/org/xml/sax/ContentHandler.html#endElement(java.lang.String, java.lang.String, java.lang.String)

Das kann man als "Callback"-Methoden bezeichnen, denn der XML Parser ruft diese Methoden in einer von dir bereitgestellten Instanz einer Klasse, die ContentHandler implementiert, auf, um dich darüber zu benachrichtigen, dass der Parser gerade ein öffnendes XML-Tag oder ein schließendes XML-Tag gelesen hat.
Es erlaubt dir, basierend auf den in den Parametern übergebenen Informationen, diese Ereignisse zu verarbeiten. Es kommt jetzt halt darauf an, was du mit den Ereignissen "XML-Start-Tag bzw. End-Tag wurde gelesen" genau machen möchtest.
Hi, ich habe eine XML-Datei die ein Haufen solcher Einträge besitzt:


Java:
<Internship typ="boss" unic="open" murt="hallo">
<Gegeben>ist</Gegeben>
<Status>ok</Status>
<Geld>10</Geld>

Die Sache ist nun, dass ich von jedem Internship, wovon ich ca. 1030 habe, einzeln den typ nehmen soll, sowie das Geld und das in einem Attribut speichern soll, aber wie greife ich da bei startElement() zu?
 

httpdigest

Top Contributor
Nehme dir bitte erstmal die Zeit, und lese die Dokumentation des Interfaces und der referenzierten Methoden. Dort wird alles erklärt.
Diese Methoden werden vom Parser aufgerufen, und du kannst dann in der Implementierung der Methoden, die du selber bereitstellst, alles tun, was du musst - basierend auf den dir per Parameter übergebenen Informationen des jeweiligen XML-Elementes.
 

berserkerdq2

Bekanntes Mitglied
Nehme dir bitte erstmal die Zeit, und lese die Dokumentation des Interfaces und der referenzierten Methoden. Dort wird alles erklärt.
Diese Methoden werden vom Parser aufgerufen, und du kannst dann in der Implementierung der Methoden, die du selber bereitstellst, alles tun, was du musst - basierend auf den dir per Parameter übergebenen Informationen des jeweiligen XML-Elementes.
Korrekt mein Problem ist, was ich nicht verstehe für was sind alle Strings, außer qname? Qname kann ja bei unserem Beispiel Internship, sien, aber zugleich auch Status und Geld oder? Das habe ich zumindest bei der Dokumentation verstanden, für was ist dann localname und quri?

Wenn ich z. B. das Geld will:

[CODE lang="java" title="i"]if(qname.equals("Geld")){
Variable=att.getValue("Geld");
}

oder? Das wäre dann korrekt?[/CODE]
 

fhoffmann

Top Contributor
Du hast hoffentlich auch ein schließendes Tag von "Internship", also
Code:
<Internship typ="boss" unic="open" murt="hallo">
    <Gegeben>ist</Gegeben>
    <Status>ok</Status>
    <Geld>10</Geld>
</Internship>

Sobald die erste Zeile (<Internship typ="boss" unic="open" murt="hallo"> vom Parser gelesen wird,
wird startElement(...) aufgerufen. Dabei werden dir die wichtigen Informationen übergeben.
Du könntest hier zum Beispiel ein neues Objekt erzeugen und die Attribute in dem Objekt speichern.

Sobald die zweite Zeile (<Gegeben>ist</Gegeben> gelesen wir, wird zunächst wieder startElement(...) aufgerufen; du weißt nun also, dass du im Element "Gegeben" bist. Anschließend wird characters(...) aufgerufen (hier erhälst du die Information "ist". Du kannst nun ggf. in den erzeugten Object diesen Wert speichern.
Das danach aufgerufene "endElement(...) kannst du möglicherweise ignorieren.
"Status" und "Geld" funktionieren analog.

Beim Aufruf von "endElement()" für "Intership" könntest du das gefüllte neue Objekt beispielsweise in der Datenbank speichern.
 

fhoffmann

Top Contributor
Korrekt mein Problem ist, was ich nicht verstehe für was sind alle Strings, außer qname? Qname kann ja bei unserem Beispiel Internship, sien, aber zugleich auch Status und Geld oder? Das habe ich zumindest bei der Dokumentation verstanden, für was ist dann localname und quri?
Diese Werte sind nur interessant, wenn du "Namespaces" in deinem XML-Dokument hast.
 

berserkerdq2

Bekanntes Mitglied
Du hast hoffentlich auch ein schließendes Tag von "Internship", also
Code:
<Internship typ="boss" unic="open" murt="hallo">
    <Gegeben>ist</Gegeben>
    <Status>ok</Status>
    <Geld>10</Geld>
</Internship>

Sobald die erste Zeile (<Internship typ="boss" unic="open" murt="hallo"> vom Parser gelesen wird,
wird startElement(...) aufgerufen. Dabei werden dir die wichtigen Informationen übergeben.
Du könntest hier zum Beispiel ein neues Objekt erzeugen und die Attribute in dem Objekt speichern.

Sobald die zweite Zeile (<Gegeben>ist</Gegeben> gelesen wir, wird zunächst wieder startElement(...) aufgerufen; du weißt nun also, dass du im Element "Gegeben" bist. Anschließend wird characters(...) aufgerufen (hier erhälst du die Information "ist". Du kannst nun ggf. in den erzeugten Object diesen Wert speichern.
Das danach aufgerufene "endElement(...) kannst du möglicherweise ignorieren.
"Status" und "Geld" funktionieren analog.

Beim Aufruf von "endElement()" für "Intership" könntest du das gefüllte neue Objekt beispielsweise in der Datenbank speichern.
Danke, aber wie prüfe ich ob ich bei Geld bin? Wenn ich bei <Geld>10</Geld> bin, also in der Zeile, kann ich das mit qName prüfen?

Also if(qName.equals("Geld"){...}?
 

fhoffmann

Top Contributor
Genau, aber wie greife ich auf das letzte Tag zu? Damit ich mir das merken kann?
Java:
public class myContentHandler implements org.sax.CotnetHandler {
   String lastTag = null;
   public void startElement(String uri,  Stirng localName, Srting qName, Attierbute atts) throws SAXException {
      // tu dies oder jenes
      lastTag = qName;
   }
   public void characters(char[] ch, int start,  int length) throws SAXException {
      // tu dies oder jenes
      if ( lastTag.equals("Geld")) {
         // speicher den Inhalt
      }
   }
}
 

fhoffmann

Top Contributor
Wenn du SAX benutzt, musst du einiges selber tun.

Wenn du dagegen DOM bentutzt, wird dir vieles abgenommen; es wird aber das gesamte XML-Dokumnet auf einmal eingelesen und benötigt entsprechend viel Arbeitsspeicher.
Das sollte aber bei kleinen Dokumenten und dem heute verfügbaren Arbeitsspeicher kein Problem sein.
ich von jedem Internship, wovon ich ca. 1030 habe
Bei solchen Mengen sehe ich jedenfalls kein Problem.
 
Beste Antwort
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
ms_cikar Bin to Float convertieren funktioniert nicht Java Basics - Anfänger-Themen 24
B Schrankensystem mit Farberkennung für Flashgame funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
I Greenscreen, funktioniert nicht zu 100%... nicht alle Pixel werden geändert Java Basics - Anfänger-Themen 1
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Operatoren Strings mit Vergleichsoperatoren, funktioniert das? Java Basics - Anfänger-Themen 9
Garrit1994 Continue funktioniert nicht wie geplant Java Basics - Anfänger-Themen 4
B Methoden Übergebe Variabel funktioniert nicht Java Basics - Anfänger-Themen 17
P exportiertes Programm funktioniert nur teilweise Java Basics - Anfänger-Themen 7
Agent4nobody Programmstart durch aufruf des interpreters funktioniert nicht Java Basics - Anfänger-Themen 14
Fugover Programm funktioniert nicht Java Basics - Anfänger-Themen 11
X Datentypen String.equals funktioniert nicht Java Basics - Anfänger-Themen 5
Alen123 Warum funktioniert mein Code nicht? Java Basics - Anfänger-Themen 64
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Wieso funktioniert mein Programm nicht Java Basics - Anfänger-Themen 2
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
sserio Größtes Palindrom-Produkt Programm funktioniert nur halb Java Basics - Anfänger-Themen 23
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
sserio Wieso funktioniert mein TableView nicht /JavaFX. Java Basics - Anfänger-Themen 4
Avalon Warum funktioniert eine Bedingung und eine andere nicht? Java Basics - Anfänger-Themen 2
J Datentypen String in File konvertieren funktioniert nicht Java Basics - Anfänger-Themen 4
U Wie genau funktioniert der ! Operator Java Basics - Anfänger-Themen 3
stormyark 4 Bit in einer for-schleife funktioniert nicht Java Basics - Anfänger-Themen 3
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
M Java printf(Locale.... funktioniert nicht Java Basics - Anfänger-Themen 3
N Wieso funktioniert die Deklaration nicht Java Basics - Anfänger-Themen 3
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
districon Backtracking funktioniert nicht ganz Java Basics - Anfänger-Themen 3
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
S Math.random funktioniert nicht Java Basics - Anfänger-Themen 5
S Schleife funktioniert nicht Java Basics - Anfänger-Themen 2
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
C System.out.println - Parameterübergabe funktioniert nicht Java Basics - Anfänger-Themen 2
JD_1998 Hilfsmethode if return funktioniert nicht Java Basics - Anfänger-Themen 2
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
T % funktioniert nicht Java Basics - Anfänger-Themen 2
D e(fx)clipse installieren funktioniert nicht Java Basics - Anfänger-Themen 3
D GPIO Nutzung mit Pi4J Library auf Raspberry funktioniert nicht Java Basics - Anfänger-Themen 3
F Java GUI-PaintComponent funktioniert nicht Java Basics - Anfänger-Themen 1
J equals funktioniert nicht - Warum Java Basics - Anfänger-Themen 13
L hilfe run button funktioniert nicht Java Basics - Anfänger-Themen 13
I Array funktioniert nicht. Java Basics - Anfänger-Themen 2
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
V_Fynn03 Erste Schritte BubbleSort Quelltext funktioniert noch nicht Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
R Erste Schritte Eclipse - Java - System.out.println(); funktioniert nicht Java Basics - Anfänger-Themen 2
G Programm mit Schleife funktioniert nicht Java Basics - Anfänger-Themen 5
T Redirect funktioniert nicht Java Basics - Anfänger-Themen 3
R Mein Plugin funktioniert nicht? Java Basics - Anfänger-Themen 10
J Zufallszahl funktioniert nicht Java Basics - Anfänger-Themen 27
D Klassen add Methode funktioniert nicht. Java Basics - Anfänger-Themen 31
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
F Vergleiche mit charAt funktioniert bei Strings nicht, was tun? Java Basics - Anfänger-Themen 5
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
G Mein Java Projekt funktioniert nicht Java Basics - Anfänger-Themen 5
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
W Wieso funktioniert mein Switch Case nicht ?! Java Basics - Anfänger-Themen 9
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
F Primzahlsuche Schleife funktioniert nicht, HILFE! Java Basics - Anfänger-Themen 8
M Methoden Arrays.deepequals() funktioniert nicht Java Basics - Anfänger-Themen 2
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
S JDK 9 für Windows 32 bit installiert, aber es funktioniert nix Java Basics - Anfänger-Themen 6
F Input/Output die eine txt-Datei funktioniert die andere nicht Java Basics - Anfänger-Themen 8
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
D Funktion zwei Arraylisten zu verleichen ob gleich funktioniert nicht Java Basics - Anfänger-Themen 26
A Hilfe bei Rekursion,Ich verstehe nicht,wie funktioniert die Rekursion in der Methode "walk" Java Basics - Anfänger-Themen 13
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
P Upload Button funktioniert nicht Java Basics - Anfänger-Themen 13
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
A TicTacToe funktioniert bis auf "schiefer" Sieg Java Basics - Anfänger-Themen 6
M Erste Schritte Importieren funktioniert nicht Java Basics - Anfänger-Themen 7
N Funktion funktioniert nicht immer Java Basics - Anfänger-Themen 6
F FileCreation - PrintWriter funktioniert nicht... Java Basics - Anfänger-Themen 1
I Collections.shuffle funktioniert nicht Java Basics - Anfänger-Themen 1
T Methode in Klasse funktioniert nicht Java Basics - Anfänger-Themen 14
T While Schleife funktioniert nicht Java Basics - Anfänger-Themen 14
C Warum funktioniert 'instanceof' bei generics nicht? Java Basics - Anfänger-Themen 4
M Frage, wie dieser Code funktioniert, bzw. weshab er bei mir nicht funktioniert Java Basics - Anfänger-Themen 4
L Level Reset funktioniert nicht Java Basics - Anfänger-Themen 3
A Java Scanner Funktioniert nicht Java Basics - Anfänger-Themen 2
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
W Warum funktioniert mein Programm nicht ? Java Basics - Anfänger-Themen 12
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
J Stringvergleich funktioniert nicht Java Basics - Anfänger-Themen 8
W Warum funktioniert mein Programm nicht ? Java Basics - Anfänger-Themen 6
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
S Backspace Abfrage funktioniert nicht Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben