Krain Geschrieben 27. Oktober 2004 Geschrieben 27. Oktober 2004 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 Zitieren
Krain Geschrieben 27. Oktober 2004 Autor Geschrieben 27. Oktober 2004 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? Zitieren
Krain Geschrieben 27. Oktober 2004 Autor Geschrieben 27. Oktober 2004 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. Zitieren
frquadrat Geschrieben 29. Oktober 2004 Geschrieben 29. Oktober 2004 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... Zitieren
Empfohlene Beiträge
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.