Estoy en una posición en la que uso Java para conectarme a un puerto TCP y descargo documentos XML uno tras otro, cada uno delimitado con el inicio <?xml
de la etiqueta del documento Un ejemplo que demuestra el formato:Uso de SAX (Java) para analizar múltiples mensajes XML desde una única secuencia TCP
<?xml version="1.0"?>
<person>
<name>Fred Bloggs</name>
</person>
<?xml version="1.0"?>
<person>
<name>Peter Jones</name>
</person>
estoy usando la API org.xml.sax.*
. El análisis SAX funciona perfectamente para el primer documento, pero se produce una excepción cuando se trata de todo el comienzo del segundo documento:
Exception in thread "main" org.xml.sax.SAXParseException: The processing instruction
target matching "[xX][mM][lL]" is not allowed.
La siguiente clase de esqueleto demuestra la configuración que estoy usando:
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()));
}
}
No tengo control sobre el formato del xml (es un feed de datos financieros), pero necesito poder analizarlo de manera eficiente y analizar todos los documentos. Pasé la tarde/noche probando cosas diferentes, pero ninguno arrojó resultados. Cualquier ayuda sería muy apreciada.
Tiene que llamar al análisis sintáctico para cada documento separado, lo que significa que necesita filtrar y dividir el flujo de entrada en los caracteres ' Xml'. –
Tuve que hacer algo como esto y simplemente respondí (a mí) [aquí] (http://stackoverflow.com/questions/6711766/multiple-xml-files-in-one-stream/) envolviendo todo en su propio Reader para un uso más simple –