Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

XML Daten aus Stream empfangen

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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?

  • Autor

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.