O
Oensel
Gast
Ich muss dringend folgende XMl-Datei auslesen, bekomme aber nur einen Teil des Inhalts angezeigt.
Dazu habe ich folgendes Java-Programm gebastelt:
und der Output ist zur Zeit folgender:
Workstation:
Institut:
Timestamp:
Typ: G
Serviceflag: *
Nachricht: GAA ANTWORTET NICHT
Workstation:
Institut:
Timestamp:
Typ: S
Serviceflag: *
Nachricht: SBT ANTWORTET NICHT
Workstation:
Institut:
Timestamp:
Typ: K
Serviceflag: *
Nachricht: KAD ANTWORTET NICHT
Am besten wäre es, wenn ihr die Code-Änderungen direkt hier eintragt, denn ich bin noch neu in Java und dann habe ich von für mich nicht eindeutigen Aussagen nicht viel. Einen XML-Dialekt kann ich hier aber aufgrund des feststehenden XML-Formates nicht anwenden (denke ich), da ich keine Änderungen an der XML vornehmen darf.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<SysWatch xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="syswatch.xsd">
<Bedienernachrichten>
<WorkstationID>R52343T21</WorkstationID>
<Institutsnummer>WL-2353</Institutsnummer>
<Timestamp>2147483647</Timestamp>
<lfdNummer>0</lfdNummer>
<Bedienernachricht Typ="G" Serviceflag="*" Nachricht="GAA ANTWORTET NICHT"/>
</Bedienernachrichten>
<Bedienernachrichten>
<WorkstationID>R52343T22</WorkstationID>
<Institutsnummer>WL-2353</Institutsnummer>
<Timestamp>2147483649</Timestamp>
<lfdNummer>1</lfdNummer>
<Bedienernachricht Typ="S" Serviceflag="*" Nachricht="SBT ANTWORTET NICHT"/>
</Bedienernachrichten>
<Bedienernachrichten>
<WorkstationID>R52343T23</WorkstationID>
<Institutsnummer>WL-2353</Institutsnummer>
<Timestamp>2147483652</Timestamp>
<lfdNummer>2</lfdNummer>
<Bedienernachricht Typ="K" Serviceflag="*" Nachricht="KAD ANTWORTET NICHT"/>
</Bedienernachrichten>
</SysWatch>
Dazu habe ich folgendes Java-Programm gebastelt:
Code:
import javax.xml.parsers.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import java.io.*;
public class Test_IKSBS extends DefaultHandler {
public static void main(String[] arguments) {
if (arguments.length == 0) {
Test_IKSBS read = new Test_IKSBS();
}
}
Test_IKSBS() {
File input = new File("E:/XML/Bedienernachrichten.xml");
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
try {
SAXParser sax = factory.newSAXParser();
sax.parse(input, new LibraryHandler() );
} catch (ParserConfigurationException pce) {
System.out.println("Could not create that parser.");
System.out.println(pce.getMessage());
} catch (SAXException se) {
System.out.println("Problem with the SAX parser.");
System.out.println(se.getMessage());
} catch (IOException ioe) {
System.out.println("Error reading file.");
System.out.println(ioe.getMessage());
}
}
}
class LibraryHandler extends DefaultHandler {
static int READING_WorkstationID = 1;
static int READING_Institutsnummer = 2;
static int READING_Timestamp = 3;
static int READING_Bedienernachricht = 4;
static int READING_NOTHING = 0;
int currentActivity = READING_NOTHING;
Bedienernachrichten Nachricht = new Bedienernachrichten();
LibraryHandler() {
super();
}
public void startElement(String uri, String localName,
String qName, Attributes attributes) {
if (qName.equals("WorkstationID"))
currentActivity = READING_WorkstationID;
else if (qName.equals("Institutsnummer"))
currentActivity = READING_Institutsnummer;
else if (qName.equals("Timestamp"))
currentActivity = READING_Timestamp;
else if (qName.equals("Bedienernachricht"))
currentActivity = READING_Bedienernachricht;
if (currentActivity == READING_Bedienernachricht) {
Nachricht.Typ = attributes.getValue("Typ");
Nachricht.Serviceflag = attributes.getValue("Serviceflag");
Nachricht.Nachricht = attributes.getValue("Nachricht");
}
}
public void characters(char[] ch, int start, int length) {
String value = new String(ch, start, length);
if (currentActivity == READING_WorkstationID)
Nachricht.WorkstationID = value;
if (currentActivity == READING_Institutsnummer)
Nachricht.Institutsnummer = value;
if (currentActivity == READING_Timestamp)
Nachricht.Timestamp = value;
if (currentActivity == READING_Bedienernachricht)
Nachricht.Bedienernachricht = value;
}
public void endElement(String uri, String localName, String qName) {
if (qName.equals("Bedienernachrichten")) {
System.out.println("\nWorkstation: " + Nachricht.WorkstationID);
System.out.println("Institut: " + Nachricht.Institutsnummer);
System.out.println("Timestamp: " + Nachricht.Timestamp);
System.out.println("Typ: " + Nachricht.Typ);
System.out.println("Serviceflag: " + Nachricht.Serviceflag);
System.out.println("Nachricht: " + Nachricht.Nachricht);
Nachricht = new Bedienernachrichten();
}
}
}
class Bedienernachrichten {
String WorkstationID;
String Institutsnummer;
String Timestamp;
String Bedienernachricht;
String Typ;
String Serviceflag;
String Nachricht;
}
und der Output ist zur Zeit folgender:
Workstation:
Institut:
Timestamp:
Typ: G
Serviceflag: *
Nachricht: GAA ANTWORTET NICHT
Workstation:
Institut:
Timestamp:
Typ: S
Serviceflag: *
Nachricht: SBT ANTWORTET NICHT
Workstation:
Institut:
Timestamp:
Typ: K
Serviceflag: *
Nachricht: KAD ANTWORTET NICHT
Am besten wäre es, wenn ihr die Code-Änderungen direkt hier eintragt, denn ich bin noch neu in Java und dann habe ich von für mich nicht eindeutigen Aussagen nicht viel. Einen XML-Dialekt kann ich hier aber aufgrund des feststehenden XML-Formates nicht anwenden (denke ich), da ich keine Änderungen an der XML vornehmen darf.