2013-11-27 2 views
0

우리는 Xalan XSLT를 사용하여 HTML 출력을 생성하는 XSL 변환을 사용합니다 (예 : XML + XSL = HTML).Xalan XSLT 스트림 브라우저에 HTML 출력

다음은 코드입니다.

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

데이터가 브라우저에 표시되기 전에 전체 변환이 완료되기를 원하지 않습니다. 개별 XML 노드/XSL 적용 템플릿에서 xsl 변환을 수행 할 때 브라우저에 데이터를 보내기 시작하는 StreamResult를 사용하여 가능할 때 생성되는 것처럼 사용자가 브라우저에 표시되는 느낌을 가져 오도록합니다. 보고서 XML이 커야합니다.

어떻게해야합니까? Xalan XSLT가이를 지원합니까? 다른 XSLT 파서가이를 지원합니까?

귀하의 조언에 감사드립니다.

답변

0

짧은 대답은 아니오입니다. Xalan을 사용하여이를 안정적으로 달성 할 수 없습니다.

EDIT :하지만 Saxon 확장 기능을 사용하는 것이 가능할 수도 있습니다.

더 긴 대답은 XSLT 프로세서의 스트리밍 기능에 약간의 진전이 있었지만 그 결과는 아직 예측할 수없는 것 같습니다. 예를 들어 Saxon에서 스트리밍을 구현하려는 시도에 대한 설명은 http://www.balisage.net/Proceedings/vol5/html/Kay01/BalisageVol5-Kay01.html 링크를 참조하십시오.

XSLT 3.0 권고안이 질문을 포용하는 것으로 간주 :

언어이 버전의 변화의 주된 목적은 스트리밍 모드에서 수행되는 변환을 가능하게 , 어디 어느 쪽도 없습니다 원본 문서 또는 결과 문서가 전체적으로 메모리에 저장됩니다.

자세한 내용은 http://www.w3.org/TR/xslt-30/을 참조하십시오. 하지만 이것은 실용적인 초안 일뿐입니다.

편집는 : 특히 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