XML-Daten fehlen in der Darstellung

Status
Nicht offen für weitere Antworten.
O

Oensel

Gast
Ich muss dringend folgende XMl-Datei auslesen, bekomme aber nur einen Teil des Inhalts angezeigt.

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.
 
B

Beni

Gast
Die Methode "characters" wird manchmal mehr als einmal aufgerufen, mach doch mal ein println in der Methode und gib die Strings aus (ob sie sinnvoll sind, ob sie überhaupt da sind, und welches Element an der Reihe ist).
 

Bleiglanz

Gesperrter Benutzer
nimm nicht den qName, sondern den localName wenn du in der startElement den "Kontext" umschaltest...

dein Doc hat ja einen Namespace
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B XML-Daten mit SAX Parser verarbeiten in Java XML & JSON 4
A GUI um auf XSD Basis (valide) XML Daten zu erzeugen XML & JSON 3
K XML Datei erstellen und Daten daraus in Java auslesen XML & JSON 6
K Login Daten mit JSoup übermitteln XML & JSON 0
M JAXB @XMLID und @XMLIDREF, wie Daten hinzufügen XML & JSON 2
G Jsoup Daten lesen XML & JSON 0
P XML Daten sortieren - Verständnisfrage XML & JSON 4
F Parsen von Daten aus einer Homepage XML & JSON 6
MiMa Verfahrensweise Daten aus dem Internet abfragen XML & JSON 44
G XML-Daten im Programm verwenden XML & JSON 5
M [XSD-Definition] Eindeutige Daten in NodeList (Bereich) XML & JSON 3
K Visualisierung von Daten XML & JSON 13
T Daten in Xml speichern XML & JSON 4
T Daten aus Programm in XML Datei speichern XML & JSON 2
X Am Server ankommende XML Daten verarbeiten XML & JSON 11
L XML Daten auslesen und in Tabelle (Array) speichern XML & JSON 1
Mike90 Daten aus DB in ExcelTabelle lesen + bearbeiten + formatieren XML & JSON 2
S Mit welcher Technologie Daten abspeichern? XML & JSON 6
J Daten werden in ArrayList geschrieben, AL nicht in .xml ? XML & JSON 5
I Mit JDOM Daten aus XML in ein Array abfüllen XML & JSON 4
R Daten aus xml lesen und in Strings speichern XML & JSON 4
G XML als "Datenbank" für kleine Daten XML & JSON 2
T [JDOM] XML File, neue Daten hinzufügen XML & JSON 5
T Darstellung N-M Beziehung XML & JSON 9

Ähnliche Java Themen

Neue Themen


Oben