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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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