# XMLStreamReader, letzten eintrag eines xml lesen?



## schlumsch (28. Dez 2009)

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 


```
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 (8. Jan 2010)

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 (8. Jan 2010)

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.


----------



## Spin (10. Jan 2010)

Moinsen , nimm doch XPATH , damit ist es sehr einfach 
Link

grüße


----------



## Sergeant_Pepper (11. Jan 2010)

Spin hat gesagt.:


> Moinsen , nimm doch XPATH , damit ist es sehr einfach
> Link



und das funktioniert auch mit SAX oder Stax? (siehe Thread-Start, große XML-Datei)


----------



## Gelöschtes Mitglied 5909 (11. Jan 2010)

Schreib dir einen ReverseFileInputStream und verwende intern eine RamdomAccessfile um von hinten zu lesen


----------

