GGK
23. Oktober 2018 um 09:13
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
Flown
23. Oktober 2018 um 11:38
2
Dein Beispiel sieht nicht mal annähernd wie ein XML aus.
Zeig mal ein vollständiges Beispiel her.
GGK
23. Oktober 2018 um 11:45
3
ups…da wurden die Tags weggeschnitten. Ich habe eine kleine Beispieldatei hochgeladen.
Log.log (105 Bytes)
GGK
Das hätte man auch einfach hier rein packen können
<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?
GGK
23. Oktober 2018 um 14:29
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
Für den geschilderten Anwendungsfall würde ich einen SAX-Parser verwenden.
SlaterB
23. Oktober 2018 um 15:10
7
genau mit der hier geposteten Datei geht der Code, soweit zu testen wäre von Vorteil
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());
GGK
24. Oktober 2018 um 07:46
8
vielen Dank! Ihr habt mir sehr geholfen…
Ihr seid ein geniales Forum!
GGK