Hi Jeff, There's a sample [1] included with Xerces which shows how you can process XML documents (multiple ones or a single one followed by arbitrary data) sent over a socket. If you're in control of both ends of the stream, you might want to implement something like that.
Thanks. [1] http://svn.apache.org/viewvc/xerces/java/trunk/samples/socket/KeepSocketOpen.java?revision=447688&view=markup Michael Glavassevich XML Parser Development IBM Toronto Lab E-mail: [EMAIL PROTECTED] E-mail: [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote on 05/17/2007 06:43:24 PM: > I'm receiving an XML document over a TCP socket, I then instantiate an > instance of DOMParser and attempt to parse the data. I get the identical > exception when using Xerces-J as well. Here's the exception: > > org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was > found in markup after the end of the element content. > at > org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1213) > at > org.apache.xerces.framework.XMLDocumentScanner. > reportFatalXMLError(XMLDocumentScanner.java:588) > at > org.apache.xerces.framework. > XMLDocumentScanner$TrailingMiscDispatcher. > dispatch(XMLDocumentScanner.java:1461) > at > org.apache.xerces.framework.XMLDocumentScanner. > parseSome(XMLDocumentScanner.java:381) > at > org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098) > > Here's the relevant snippet(s) of source (there is code to write out the > socket, just not here): > > Socket socket = new Socket( hostIP, hostPort ); > OutputStream outStream = socket.getOutputStream(); > InputStream inStream = socket.getInputStream(); > DataInputStream dataInStream = new DataInputStream( inStream ); > byte[] inByteArray = new byte[ 2048 ]; > int length = dataInStream.read( inByteArray ); > InputStream byteData = new ByteArrayInputStream( inByteArray ); > > try > { > DOMParser dp = new DOMParser(); > dp.parse( new InputSource( byteData )); > Document doc = dp.getDocument(); > } > catch ( Exception e ) > { > e.printStackTrace(); > System.exit( 1 ); > } > > Is there a different way to do this? I even tried creating a new String > based on the length read from the socket, minus one. The parser then saw > that the final angle bracket of my root element was missing, so it doesn't > seem to be an encoding issue. > > Any help would be appreciated. > Jeff > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]