Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun?
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?
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.
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
}
}
}
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.