XSLT 아키텍처는 Visual Studio 2005 릴리스에서 다시 디자인되었습니다. XslTransform 클래스가 XslCompiledTransform 클래스로 교체되었습니다.
다음 섹션들에서는 XslCompiledTransform 클래스와 XslTransform 클래스 간의 몇 가지 주요 차이점을 설명합니다.
성능
클래스에는 XslCompiledTransform 많은 성능 향상이 포함됩니다. 새 XSLT 프로세서는 다른 프로그래밍 언어에 대해 CLR(공용 언어 런타임)이 수행하는 것과 비슷하게 XSLT 스타일시트를 일반적인 중간 형식으로 컴파일합니다. 스타일시트가 컴파일되면 캐시하고 다시 사용할 수 있습니다.
클래스에는 XslCompiledTransform 클래스보다 XslTransform 훨씬 빠르게 만드는 다른 최적화도 포함되어 있습니다.
비고
클래스의 XslCompiledTransform 전반적인 성능이 클래스보다 XslTransform 우수하지만 클래스 Load 메서드 XslCompiledTransform 는 변환 시 처음 호출될 때 클래스의 Load 메서드보다 XslTransform 더 느리게 수행될 수 있습니다. 이는 XSLT 파일을 로드하기 전에 컴파일해야 하기 때문입니다. 자세한 내용은 다음 블로그 게시물을 참조하세요. XslCompiledTransform이 XslTransform보다 느리나요?
안전
기본적으로 클래스는 XslCompiledTransform XSLT document()
함수 및 포함된 스크립팅에 대한 지원을 사용하지 않도록 설정합니다. 이러한 기능은 기능이 활성화된 개체를 XsltSettings 만들고 메서드에 Load 전달하여 사용하도록 설정할 수 있습니다. 다음 예제에서는 스크립팅을 사용하도록 설정하고 XSLT 변환을 수행하는 방법을 보여 줍니다.
비고
스크립트 블록은 .NET Framework에서만 지원됩니다. .NET Core 또는 .NET 5 이상에서는 지원 되지 않습니다 .
// Create the XsltSettings object with script enabled.
XsltSettings settings = new XsltSettings(false,true);
// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("calc.xsl", settings, new XmlUrlResolver());
xslt.Transform("books.xml", "books.html");
' Create the XsltSettings object with script enabled.
Dim settings As New XsltSettings(False, True)
' Execute the transform.
Dim xslt As New XslCompiledTransform()
xslt.Load("calc.xsl", settings, New XmlUrlResolver())
xslt.Transform("books.xml", "books.html")
자세한 내용은 XSLT 보안 고려 사항을 참조하세요.
새 기능
임시 파일
XSLT 처리 중에 임시 파일이 생성되는 경우도 있습니다. 스타일시트에 스크립트 블록이 포함되어 있거나 디버그 설정이 true로 설정된 상태로 컴파일된 경우 %TEMP% 폴더에 임시 파일이 만들어질 수 있습니다. 타이밍 문제로 인해 일부 임시 파일이 삭제되지 않는 경우가 있을 수 있습니다. 예를 들어 파일이 현재 AppDomain 또는 디버거에서 사용 중인 경우 개체의 TempFileCollection 종료자는 파일을 제거할 수 없습니다.
이 속성은 TemporaryFiles 추가 정리에 사용하여 모든 임시 파일이 클라이언트에서 제거되도록 할 수 있습니다.
xsl:output 요소 및 XmlWriter에 대한 지원
클래스는 XslTransformxsl:output
변환 출력이 개체로 전송 XmlWriter 될 때 설정을 무시했습니다. 클래스에는 스타일시트의 XslCompiledTransform 요소에서 파생된 출력 정보를 포함하는 OutputSettings 개체를 반환하는 XmlWriterSettings 속성이 있습니다.
XmlWriterSettings 개체는 올바른 설정으로 XmlWriter 개체를 만들어 Transform 메서드에 전달하는 데 사용됩니다. 다음 C# 코드는 이 동작을 보여 줍니다.
// Create the XslTransform object and load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(stylesheet);
// Load the file to transform.
XPathDocument doc = new XPathDocument(filename);
// Create the writer.
XmlWriter writer = XmlWriter.Create(Console.Out, xslt.OutputSettings);
// Transform the file and send the output to the console.
xslt.Transform(doc, writer);
writer.Close();
디버그 옵션
이 클래스는 XslCompiledTransform 디버그 정보를 생성할 수 있으므로 Microsoft Visual Studio 디버거를 사용하여 스타일시트를 디버그할 수 있습니다. 자세한 내용은 XslCompiledTransform(Boolean)을 참조하세요.
동작 차이
XmlReader로 변환
클래스 XslTransform 에는 변환 결과를 개체로 반환하는 여러 Transform 오버로드가 XmlReader 있습니다. 이러한 오버로드는 결과 XML 트리의 직렬화 및 역직렬화 오버헤드를 발생시키지 않고 변환 결과를 메모리 내 표현(예: XmlDocument 또는 XPathDocument)으로 로드하는 데 사용할 수 있습니다. 다음 C# 코드는 변환 결과를 개체에 로드하는 XmlDocument 방법을 보여 줍니다.
// Load the style sheet
XslTransform xslt = new XslTransform();
xslt.Load("MyStylesheet.xsl");
// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
doc.Load(xslt.Transform(input, (XsltArgumentList)null));
XslCompiledTransform 클래스는 XmlReader 개체로 변환을 지원하지 않습니다. 그러나 CreateNavigator 메서드를 사용하여 XmlWriter에서 직접 결과 XML 트리를 로드함으로써 비슷한 작업을 수행할 수 있습니다. 다음 C# 코드는 .를 사용하여 XslCompiledTransform동일한 작업을 수행하는 방법을 보여 줍니다.
// Transform input document to XmlDocument for additional processing
XmlDocument doc = new XmlDocument();
using (XmlWriter writer = doc.CreateNavigator().AppendChild()) {
xslt.Transform(input, (XsltArgumentList)null, writer);
}
임의 동작
W3C XSLT(XSL 변환) 버전 1.0 권장 사항에는 구현 공급자가 상황을 처리하는 방법을 결정할 수 있는 영역이 포함되어 있습니다. 이러한 영역은 임의 동작으로 간주됩니다. XslCompiledTransform은 XslTransform 클래스와 다르게 행동하는 여러 영역이 있습니다. 자세한 내용은 복구 가능한 XSLT 오류를 참조하세요.
확장 개체 및 스크립트 함수
XslCompiledTransform 는 스크립트 함수 사용에 대한 두 가지 새로운 제한을 도입했습니다.
XPath 식에서 public 메서드만 호출할 수 있습니다.
오버로드는 인수 수에 따라 서로 구별할 수 있습니다. 둘 이상의 오버로드에 동일한 수의 인수가 있는 경우 예외가 발생합니다.
XslCompiledTransform에서 스크립트 함수에 대한 바인딩(메서드 이름 조회)은 컴파일 시간에 발생하며 XslTransform에서 사용된 스타일시트는 XslCompiledTransform와 함께 로드될 때 예외가 발생할 수 있습니다.
XslCompiledTransform은 msxsl:using
요소 내에서 msxsl:assembly
및 msxsl:script
하위 요소를 지원합니다.
msxsl:using
및 msxsl:assembly
요소는 스크립트 블록에서 사용할 추가 네임스페이스 및 어셈블리를 선언하는 데 사용됩니다. 자세한 내용은 msxsl:script를 사용하는 스크립트 블록을 참조하세요.
XslCompiledTransform 는 인수 수가 같은 오버로드가 여러 개 있는 확장 개체를 금지합니다.
MSXML 함수
추가 MSXML 함수에 대한 지원이 클래스에 XslCompiledTransform 추가되었습니다. 다음 목록에서는 새로운 기능 또는 향상된 기능에 대해 설명합니다.
msxsl:node-set: XslTransform노드 집합 함수 함수의 인수를 결과 트리 조각이 되도록 요구했습니다. 클래스에 XslCompiledTransform 이 요구 사항이 없습니다.
msxsl:version: 이 함수는 .에서 XslCompiledTransform지원됩니다.
XPath 확장 함수: ms:string-compare 함수, ms:utc 함수, ms:namespace-uri 함수, ms:local-name 함수, ms:number 함수, ms:format-date 함수 및 ms:format-time 함수 가 지원됩니다.
스키마 관련 XPath 확장 함수: 이러한 함수는 기본적으로 XslCompiledTransform지원되지 않습니다. 그러나 확장 함수로 구현할 수 있습니다.
참고하십시오
.NET