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?
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.
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.
Also: Was willst du denn überhaupt tun?
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.
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?
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.
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?
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.
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?
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.
im ContentHanler merkst du dir das letzte tag aus "startElement(...)".
Wenn dann "characters(...)" aufgerufen wir, weißt du, in welches Feld du en Inhalt ("10") schreiben musst.
im ContentHanler merkst du dir das letzte tag aus "startElement(...)".
Wenn dann "characters(...)" aufgerufen wir, weißt du, in welches Feld du en Inhalt ("10") schreiben musst.
publicclass myContentHandler implements org.sax.CotnetHandler{String lastTag =null;publicvoidstartElement(String uri,Stirng localName,Srting qName,Attierbute atts)throwsSAXException{// tu dies oder jenes
lastTag = qName;}publicvoidcharacters(char[] ch,int start,int length)throwsSAXException{// tu dies oder jenesif( lastTag.equals("Geld")){// speicher den Inhalt}}}
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.