Je suis dans une position où j'utilise Java pour me connecter à un port TCP et diffuser des documents XML les uns après les autres, chacun délimité par le <?xml
de l'étiquette de document. Un exemple qui démontre le format:Utilisation de SAX (Java) pour analyser plusieurs messages XML à partir d'un seul flux TCP
<?xml version="1.0"?>
<person>
<name>Fred Bloggs</name>
</person>
<?xml version="1.0"?>
<person>
<name>Peter Jones</name>
</person>
J'utilise le org.xml.sax.*
api. L'analyse syntaxique SAX fonctionne parfaitement pour le premier document mais lance une exception en ce qui concerne tout le début du second document:
Exception in thread "main" org.xml.sax.SAXParseException: The processing instruction
target matching "[xX][mM][lL]" is not allowed.
La classe squelette suivant montre la configuration que je utilise:
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()));
}
}
Je n'ai aucun contrôle sur le format du XML (c'est un flux de données financières), mais je dois pouvoir l'analyser efficacement et analyser tous les documents. J'ai passé l'après-midi/soirée à essayer différentes choses mais aucune n'a donné de résultats. Toute aide serait grandement appréciée.
Vous devez appeler analyse pour chaque document séparé, ce qui signifie que vous devez filtrer et diviser le flux d'entrée sur les caractères ' Xml'. –
Je devais faire quelque chose comme ça et juste répondu (à moi-même) [ici] (http://stackoverflow.com/questions/6711766/multiple-xml-files-in-one-stream/) enveloppant tout dans son propre lecteur pour une utilisation plus simple –