Не компилируется - обратите внимание, что seqStream нигде не определен, а переименование в поток приводит к ошибке «нет подходящего конструктора» для нового InputSource.

ужно проанализировать непрерывный поток правильно сформированных XML-элементов, для которых мне дают только уже построенныйjava.io.Reader объект. Эти элементы не заключены в корневой элемент и не имеют префикс XML-заголовка<?xml version="1.0"?>", но в остальном действителен XML.

Использование Javaorg.xml.sax.XMLReader Класс не работает, потому что XML Reader ожидает синтаксический анализ правильно сформированного XML, начиная с включающего корневого элемента. Таким образом, он просто читает первый элемент в потоке, который он воспринимает как корень, и терпит неудачу в следующем, с типичным

org.xml.sax.SAXParseException: разметка в документе после корневого элемента должна быть правильно сформирована.

Для файлов, которые не содержат корневого элемента, но где такой элемент существует или может быть определен (и называется, скажем, MyRootElement), можно сделать что-то вроде следующего:

        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);

Я проверил вышеизложенное, сохранив частьjava.io.Reader вывод в файл и все работает. Однако этот подход не применим в моем случае, и такую ​​дополнительную информацию (заголовок XML, корневой элемент) вставить нельзя, так какjava.io.Reader Объект, переданный в мой код, уже создан.

По сути, я ищу «фрагментированный анализ XML». Итак, мой вопрос, можно ли это сделать, используя стандартные API Java (включаяorg.sax.xml.* а такжеjava.xml.* пакеты)?

Ответы на вопрос(1)

Ваш ответ на вопрос