XMLStreamReader, letzten eintrag eines xml lesen?

schlumsch

Aktives Mitglied
Hallo, ich habe eine Funktion mit welcher ich erfolgreich ein xml-file parse, bzw. lese ich einfach nur den ersten eintrag des files. Nun ist es allerdings erforderlich das ich diesen Eintrag ganz an das Ende des xml verschiebe. Da mein file mal locker 80MB gross werden kann möchte ich beim Ermitteln des letzten Eintrages nicht unbe3dingt von "oben nach unten durchrattern" bis ich am Schluss angekommen bin. Gibt es evtl eine Möglichkeit auch schnell den letzten eintrag eines xml zu lesen, die Datei also zB bottom-up zu parsen??

Hier mal mein bisheriger code, ich danke schonmal :)

Java:
	private static Timestamp getLastCheckoutTime(String filename) {
		Timestamp result = new Timestamp(0);
		XMLInputFactory xmlif = XMLInputFactory.newInstance();
		XMLStreamReader xmlr;
		try {
			xmlr = xmlif.createXMLStreamReader(new FileReader(filename));
		    xmlr.next();
		    
		    String fileTimestamp = xmlr.getElementText();
		    result = abnormalizer.StringToTimestamp(fileTimestamp, "yyyy-MM-dd hh:mm:ss.SSS");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			killme(e.getMessage());
		} catch (XMLStreamException e1) {
			e1.printStackTrace();
			killme(e1.getMessage());
		}
		return result;
	}
 

Sergeant_Pepper

Bekanntes Mitglied
Hallo,
soweit ich weiß geht das weder mit einer XML-Push-API (SAX) noch mit einer Pull-API (StaX, wohl das was du machst).
Bei beiden APIs fängt man vorne an und liest sich bis zum Ende durch.

StaX könnte in deinem Fall etwas performanter sein, weil die Events (Start-Element, End-Element usw) nicht automatisch an die Handler weitergeleitet werden, wie es bei SAX der Fall ist.
 

schlumsch

Aktives Mitglied
Jau ich konnte es mir schon fast denken und habe mittlerweile eine andere Lösung. Ich wollte einen Zeitspempel im xml speichern, welcher alledings nicht zu den einzelnen Datensätzen gehört sondern für mein Parser-Prog. benötigt wird. Ich haue das Ding atuell einfach als Kommentar am Anfang in das file und gut ist.
 
G

Gelöschtes Mitglied 5909

Gast
Schreib dir einen ReverseFileInputStream und verwende intern eine RamdomAccessfile um von hinten zu lesen
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben