Bir TCP bağlantı noktasına bağlanmak için Java'yı kullandığım bir konumdayım ve XML belgelerini birbiri ardına sıralıyorum, her biri <?xml
ile sınırlandırıldı belge etiketinin formatını gösteren bir örnek:Tek bir TCP akışından birden çok XML iletisini ayrıştırmak için SAX (Java) kullanma
<?xml version="1.0"?>
<person>
<name>Fred Bloggs</name>
</person>
<?xml version="1.0"?>
<person>
<name>Peter Jones</name>
</person>
Ben org.xml.sax.*
API kullanıyorum.
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()));
}
}
: Aşağıdaki iskelet sınıf kullanıyorum kurulum gösteren
Exception in thread "main" org.xml.sax.SAXParseException: The processing instruction
target matching "[xX][mM][lL]" is not allowed.
: ikinci belgenin başında genelinde geldiğinde SAX ayrıştırma ilk belge için mükemmel çalışıyor ancak bir istisna atar Xml'nin formatı üzerinde herhangi bir kontrolüm yok (bu bir finansal veri feed'i), ancak verimli bir şekilde ayrıştırmak ve tüm belgeleri ayrıştırmak zorundayım. Öğleden sonraları/akşamları farklı şeyler denedim ama hiçbiri sonuç vermedi. Herhangi bir yardım büyük takdir edilecektir.
Her bir ayrı belge için ayrıştırma yapmalısınız, yani ' Xml' karakterleri üzerindeki giriş akışını filtrelemek ve parçalamak zorundasınız. –
Bu gibi bir şey yapmam gerekti ve sadece kendime (burada) (http://stackoverflow.com/questions/6711766/multiple-xml-files-in-one-stream/) kendi Reader'ında her şeyi sarmadım Daha kolay kullanım için –