Анализ XML-потока без корневого элемента

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

Использование Java Класс org.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, корневой элемент) не может быть b e вставлен, поскольку объект java.io.Reader , переданный моему коду, уже создан.

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

17
задан skaffman 10 July 2011 в 11:38
поделиться