Zum Inhalt springen

XML Daten aus Stream empfangen


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

Ich habe folgenden Code:

public class MessageHandler {


    DataOutputStream writer;

    XMLOutputter output;


    public MessageHandler(OutputStream ps) {

        this.writer = new DataOutputWriter(ps);


        Format f = Format.getCompactFormat();

        f.setEncoding("ISO-8859-1");

        output = new XMLOutputter(f);

    }


    public void sendMessage(String msg) {

        Element root = new Element("chatdata");

        Element type = new Element("type");

        type.setText("message");

        Element value = new Element("value");

        value.setText(msg);


        root.addContent(type);

        root.addContent(value);


        Document doc = new Document(root);

        try {

            output.output(doc,writer);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }


}

Meine Frage hierzu:

Wie empfange ich die XML-Datei auf der anderen Seite um sie zu parsen?

Ich kenn mich mit Streams usw. überhaupt nicht aus.

Ich möchte auf der anderen Seite die XML-Daten empfangen und Parsen.

Auf der anderen Seite horche ich an einem Socket (hoffe das sagt man so);

Habe keine Ahnung wie ich das machen soll. Kann mir bitte jemand helfen?

danke

markus

Geschrieben

Ich habe jetzt eine Lösung, aber der Parser bringt einen Fehler!

erst mal meine Lösung:

while(true) {

                byte[] bytes = new byte[512];

                in.read(bytes);


                ByteArrayInputStream bs = new ByteArrayInputStream(bytes);


                SAXParserFactory factory = SAXParserFactory.newInstance();

                factory.setValidating(false);


                SAXParser parser = factory.newSAXParser();

                parser.parse(bs,new Handler());

            }

Und diesen Fehler bringt der Parser:

org.xml.sax.SAXParseException: Unzulässiges XML-Zeichen:

Ich weiß zwar, was der Fehler bedeutet, aber wie verhindere ich, dass dieses Zeichen mitgesendet wird?

Geschrieben

Hab es jetzt so gelöst:


while(true) {

                byte[] bytes = new byte[512];

                Arrays.fill(bytes,(byte)' ');

                in.read(bytes);


                ByteArrayInputStream bs = new ByteArrayInputStream(bytes);


                SAXParserFactory factory = SAXParserFactory.newInstance();

                factory.setValidating(false);


                SAXParser parser = factory.newSAXParser();

                parser.parse(bs,handler);

            }

Falls es einer brauchen kann!

Bei mir funktionierts - muss nur noch den Handler fertig schreiben.

Geschrieben
Ich habe jetzt eine Lösung, aber der Parser bringt einen Fehler!

in.read(bytes) liefert Dir auch gleich noch die Anzahl der tatsächlich gelesenen Bytes!

Daher solltest Du die überzähligen Null-Bytes entfernen, indem Du nur die tatsächlich eingelesenen übergibst...


int anzahl = in.read(bytes);

ByteArrayInputStream bs = new ByteArrayInputStream(bytes,0,anzahl);

Dadurch solltest Du auch keine unnötigen 0-Bytes am Ende mehr haben...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...