Parar um fluxo XML sem elemento raiz

Preciso analisar um fluxo contínuo de elementos XML bem formados, aos quais recebi apenas um @ já construíjava.io.Reader objeto. Esses elementos não estão incluídos em um elemento raiz nem são anexados a um cabeçalho XML como<?xml version="1.0"?>", mas são XML válidos.

Usando o Javaorg.xml.sax.XMLReader class não funciona, porque o XML Reader espera analisar XML bem formado, começando com um elemento raiz anexo. Então, ele apenas lê o primeiro elemento do fluxo, que ele percebe como raiz, e falha no próximo, com o típico

org.xml.sax.SAXParseException: a marcação no documento após o elemento raiz deve estar bem formad

Para arquivos que não contêm um elemento raiz, mas onde esse elemento existe ou pode ser definido (e é chamado, digamos, MyRootElement), é possível fazer algo como o seguinte:

        Strint path = <the full path to the file>;

        XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();

        StringBuilder buffer = new StringBuilder();

        buffer.append("<?xml version=\"1.0\"?>\n");
        buffer.append("<!DOCTYPE MyRootElement ");
        buffer.append("[<!ENTITY data SYSTEM \"file:///");
        buffer.append(path);
        buffer.append("\">]>\n");
        buffer.append("<MyRootElement xmlns:...>\n");
        buffer.append("&data;\n");
        buffer.append("</MyRootElement>\n");

        InputSource source = new InputSource(new StringReader(buffer.toString()));

        xmlReader.parse(source);

Testei o acima, salvando parte dojava.io.Reader gera um arquivo e funciona. No entanto, essa abordagem não é aplicável no meu caso e essas informações extras (cabeçalho XML, elemento raiz) não podem ser inseridas, pois ojava.io.Reader objeto passado para o meu código já está construíd

Essencialmente, estou procurando "análise XML fragmentada". Então, minha pergunta é: isso pode ser feito usando APIs Java padrão (incluindo oorg.sax.xml.* ejava.xml.* pacotes)?

questionAnswers(6)

yourAnswerToTheQuestion