2013-11-27 7 views
0

Мы используем Xalan XSLT для преобразования XSL для генерации вывода HTML, то есть XML + XSL = HTML.Xalt XSLT Поток HTML-вывод в браузер

Ниже приведен код.

out=response.getOutputStream(); 
TransformerFactory factory = TransformerFactory.newInstance(); 
Transformer transformer = factory.newTransformer() 
transformer.transform(new StreamSource(in), new StreamResult(out)); 

Я не хочу, чтобы все преобразование завершалось, прежде чем данные будут отображаться в браузере. Я хочу, чтобы StreamResult имел вывод HTML, чтобы начать отправку данных в браузер, поскольку он выполняет преобразование xsl на отдельных узлах XML/XSL-приложениях, чтобы пользователь получал впечатление, что что-то отображается в браузере по мере его создания, потому что это возможно для отчета XML будет большим.

Как это достичь? Поддерживает ли Xalan XSLT это? Поддерживает ли любой другой синтаксический анализатор XSLT.

Буду признателен за ваш совет.

ответ

0

Короткий ответ: нет, это невозможно достичь с помощью Xalan.

EDIT: Однако, возможно, с расширениями к Саксону - взгляните на них.

Что касается более длительного ответа, потоковые возможности процессоров XSLT заметно улучшились, но результаты пока еще слишком непредсказуемы. Например, см. Эту ссылку: http://www.balisage.net/Proceedings/vol5/html/Kay01/BalisageVol5-Kay01.html для обсуждения попытки внедрения Streaming in Saxon.

Предполагается, что Рекомендация XSLT 3.0 будет охватывать этот вопрос: не

Основная цель изменений в этой версии языка для того, чтобы преобразования должны быть выполнены в потоковом режиме, где ни исходный документ или итоговый документ всегда хранятся в памяти .

См. http://www.w3.org/TR/xslt-30/ для получения дополнительной информации. Это только рабочий проект.

EDIT: Для потоковой передачи с Xalan, в частности, Майкл Кей пишет:

Инкрементальное преобразование в Xalan фактически не остановить строительство исходного документа целом в виде дерева в памяти; все, что он делает, - это разрешить дерево, которое будет создано параллельно с процессом преобразования. Если вы хотите потоковое преобразование, Saxon-EE - ваш единственный практичный вариант . [...]

Это взято из Incremental/streaming XSLT transformations?, начиная с 2012 года Похоже, StreamSource не потоковое, на самом деле.

+0

Благодарим вас за ответ. Быстрый вопрос, тогда в чем цель нового StreamSource (in), нового StreamResult (out)? Извините, что я новичок в XSLT. Я думал, что StreamSource (in) означает, что XML может быть потоковым, т. Е. Сгенерированный тег по тегу, нет? Я предполагал, что StreamResult (out) будет делать то же, что и поток вывода HTML, как он доступен? Что делает «постепенное преобразование» в Xalan? Буду признателен за ваш ответ. – user2101374

+0

См. Мой отредактированный ответ на это. –

+0

Понял, поэтому, если я правильно его читаю до тех пор, пока XML не сгенерирует вывод или результат HTML не может быть записан в браузер, правильно? Мне показалось, что если один тег из целого xml завершен, процесс преобразования может начаться, и StreamResult (out) может начать писать ответ в браузере, поэтому я ошибся, и я думаю, что это Saxon-EE? Буду признателен за ваш совет. – user2101374