Eine "Art" XML Datei (Logdatei einer Server Applikation) einlesen


#1

Hallo,

ich suche eine Möglichkeit eine “Art” XML Datei einzulesen.
Es ist eine Logdatei eines Serverprozesses die mittels Tags formatiert ist.
Ich greife via SSH auf einen Linux Server zu und hole mir die Änderungen im Log via tail -f

Bsp der Datei:
date=mm.dd.yyyy pid = “1234”
das passiert jetzt gerade

Wenn ich einen XML Parser (z.B. DOM Parser) nutze, dann stolpert dieser darüber, dass ich keine reine XML Datei verarbeite. die Tags rausklauben mag ich auch nicht.
Habt ihr vielleicht eine Idee, wie ich die zeilen im Logfile darstellen kann?

Danke sehr
GGK


#2

Dein Beispiel sieht nicht mal annähernd wie ein XML aus.

Zeig mal ein vollständiges Beispiel her.


#3

ups…da wurden die Tags weggeschnitten. Ich habe eine kleine Beispieldatei hochgeladen.

Log.log (105 Bytes)

GGK


#4

Das hätte man auch einfach hier rein packen können :wink:

<log date="23.10.2018" level = "debug" pid = "1234" >
     <event> das passiert jetzt gerade </event>
</log>

Und warum genau sollte damit jetzt ein xml-parser nicht klar kommen?


#5

Anbei ein Beispiel-Code

     File inputFile = new File("Log.log");
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
     Document doc = dBuilder.parse(inputFile);
     doc.getDocumentElement().normalize();
     System.out.print("Root element: ");
     System.out.println(doc.getDocumentElement().getNodeName());

Fehlermeldung:
[Fatal Error] Log.log:4:2: Markup im Dokument nach dem Root-Element muss ordnungsgemäß formatiert sein.

Ich gehe davon aus, dass der Parser die Zeile
<?xml version = "1.0"?>
vermisst


#6

Für den geschilderten Anwendungsfall würde ich einen SAX-Parser verwenden.


#7

genau mit der hier geposteten Datei geht der Code, soweit zu testen wäre von Vorteil :wink:

die Fehlermeldung in Suchmaschine findet auch ins Englische übersetzt

mehrere Top-Level-Tags in einer Datei wird wenig gemocht,
eine Möglichkeit wäre, die Datei jeweils im Dateisystem oder on the fly zu ergänzen:

	File inputFile = new File("Log.log");
	FileReader r = new FileReader(inputFile);
	BufferedReader br = new BufferedReader(r);
	StringBuilder b = new StringBuilder();
	b.append("<rootDesUebels>");
	String line = null;
	while ((line = br.readLine()) != null)
		b.append(line); // Zeilenumbrüche wohl verzichtbar
	b.append("</rootDesUebels>");
	br.close();
	String all = b.toString();

	DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
	DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
	Document doc = dBuilder.parse(new InputSource(new StringReader(all)));
	doc.getDocumentElement().normalize();
	System.out.print("Root element: ");
	System.out.println(doc.getDocumentElement().getNodeName());

#8

vielen Dank! Ihr habt mir sehr geholfen…
Ihr seid ein geniales Forum!

GGK