Veröffentlicht 27. Oktober 200420 j 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
27. Oktober 200420 j 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?
27. Oktober 200420 j 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.
29. Oktober 200420 j 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.