2011-03-11 3 views
8

Java에서 XSLT를 처리 할 객체를 생성하기위한 TransformerFactory에서 XML을 결과로 변환 할 수있는 Transformer 객체를 생성하는Java XSLT 변환에서 newTransformer와 newTemplates 간의 차이점

  • newTransformer 메소드가 있습니다.
  • 을 생성 할 수있는 Templates 객체를 생성하는
  • newTemplates.

Transformer 설명서에 명시 적으로 다음과 같이 명시되어 있습니다.

변환기는 여러 번 사용할 수 있습니다.

내 응용 프로그램은 동일한 XSLT를 사용하여 다양한 XML을 처리합니다. 프로그램의 시작 부분에서 newTransformer을 사용하여 Transformer을 만든 다음 모든 XML에 대해 다시 사용합니다 (동기화되어 있는지 확인하여 하나의 스레드에서만 사용하고 각 처리 전에 reset() 메서드를 호출합니다).

그렇게하면 모든 XML 처리에 대해 XSLT를 다시 컴파일하는 데 드는 비용이 발생하지 않습니다.

그래서 newTemplatesTemplates 오브젝트의 요점은 무엇입니까? 그 대신 XML을 사용하여 각 XML에 대해 새로운 Transformer 개체를 생성해야합니까?

+2

'xsltprocessor'는 이러한 질문에 대한보다 구체적인 태그입니다. 태그가 지정되었습니다. – Flack

답변

6

단일 스레드에서 실행 중이면 많은 차이를 느끼지 못할 것입니다.

성능은 항상 API 사양보다는 구현에 따라 달라집니다. Saxon을 사용하면 Transformer를 다시 사용할 때 doc() 함수를 사용하여로드 된 문서 캐시를 유지합니다. 이는 다음 변환이 동일한 소스 문서에 액세스 할 것인지 여부에 따라 좋거나 나쁠 수 있습니다. 일반적으로 내 충고는 각 변형에 대해 새로운 Transformer를 사용하는 것이지만 물론 동일한 Templates 객체를 사용하는 것입니다.

+0

+1 정보를 제공해 주셔서 감사합니다. –

4

newTemplates()는 스타일 시트를 재사용 할 수있는 내부 표현으로 컴파일합니다. 이는 파이썬과 같은 인터프리터 언어를 컴파일하여 바이트 코드를 저장하고 바이트 코드를 저장하는 것과 같습니다. 반대로 실행 시마다 재 해석하는 것과는 다릅니다.

+0

당신은 그것을 'newTransformer'가하는 것과 어떻게 비교할 것인가? –

+0

예, 컴파일 된 스타일 시트를 저장하지 않습니다. –

+0

'Transformer' 객체를 다시 사용하면 스타일 시트를 한 번만 컴파일하므로'newTransfomer'는'newTemplates'처럼 컴파일 된 스타일 시트를 컴파일하고 저장합니다 (또는 내가 뭔가를 오해 했습니까?) –

6

가장 큰 차이점은 Templates은 스레드로부터 안전하며 Transformer은 그렇지 않습니다. 또한 설명서에서는 Templates 인스턴스를 만드는 동안 성능 최적화를 적용 할 수 있음을 의미합니다. 따라서 Templates 인스턴스의 초기 생성은 비용이 많이 들지만 실제로 사용하면 성능이 향상 될 수 있습니다. 동기화 및 재설정을 수동으로 관리해야하는 경우에는 Templates이 사용자의 관심을 끌고 있다고 말하고 싶습니다. ...

+0

템플릿에 XSL이없는 경우를 대비하여 TransformerFactory.newTransformer()의 호출 기능을 향상시킬 수있는 방법은 무엇입니까? –

관련 문제