Используя SAX (Java) для парсинга нескольких сообщений XML от единственного потока TCP

Я в состоянии, где я использую Java для соединения с портом TCP, и переданные потоком XML-документы один за другим, каждый разграниченный с <?xml запустите тега документа. Пример, который демонстрирует формат:

<?xml version="1.0"?>
<person>
    <name>Fred Bloggs</name>
</person>
<?xml version="1.0"?>
<person>
    <name>Peter Jones</name>
</person>

Я использую org.xml.sax.* API. Парсинг SAX работает отлично на первый документ, но выдает исключение, когда это сталкивается с запуском второго документа:

Exception in thread "main" org.xml.sax.SAXParseException: The processing instruction 
target matching "[xX][mM][lL]" is not allowed.

Следующий скелетный класс демонстрирует установку, которую я использую:

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.helpers.XMLReaderFactory;

import java.io.FileReader;

public class XMLTest extends DefaultHandler {

  public XMLTest() {
     super();
  }

  public static void main(String[] args) throws Exception {
    XMLReader xr = XMLReaderFactory.createXMLReader();

    XMLTest handler = new XMLTest();
    xr.setContentHandler(handler);
    xr.setErrorHandler(handler);

    xr.parse(new InputSource(new Socket("127.0.0.1", 4555).getInputStream()));
  }
}

Я не имею никакого контроля над форматом xml (это - канал финансовых данных), но я должен смочь проанализировать его эффективно и проанализировать все документы. Я провел день/вечер, пробуя разные вещи, но ни один не привел к результатам. Любая справка значительно ценилась бы.

6
задан jkt 21 July 2010 в 18:42
поделиться