2012-02-06 3 views
3

XSLT 프로세서의 동작에 약간의 차이가 있습니다. 이 문제의 배경이 무엇인지, 그리고 프로세서 차이점에서 사용할 수있는 전체 개요가 있는지 궁금합니다.XSLT 텍스트 출력 프로세서 차이점

XML 스파이 (V 2,011 SP1의 64)에
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
     <xsl:text>1=&#xA;2=&#xD;3=&#xD;&#xA;4=&#xA;&#xD;end</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

실행에서, 출력된다 : 모든 경우

1= 
2= 
3= 
4= 

end 

, 헥사
난 (더미 입력)와 다음의 간단한 변환을 테스트 = 이후와 4= 이후의 줄에는 0D0A의 두 문자가 추가되었습니다. 분명히 XML Spy는 CR 및 LF가 순서대로 요청 된 경우를 제외하고 전체 CR + LF 발생으로 각 &xA; 또는 &xD;에 대한 각 요청을 바꿉니다 (3 = 부분 참조). &xA;에 대한 모든 요청은, saxon9he에서 실행할 때

는하지만, 나는이 2.0 프로세서를 탑재 한 1.0 버전의 스타일 시트를 실행하고 경고를 받고, 출력은이 경우

1= 
2=3= 
4= 
end 

입니다 0D 0A (따라서 CR이 LF 앞에 추가됨)로 바뀌지 만 &xD;에 대한 요청은 추가 LF가 아닌 요청 된 CR을 출력합니다.

XML 스파이 설정에서 다시 실행 XSLT 버전을 2.0으로 다시 실행하면 1.0과 동일한 결과를 얻을 수 있으므로이 문제를 일으키는 두 XSLT 버전에서는 다른 규칙이 아닙니다.
아마도 이것은 우리가 알아야 할 도구 간의 차이 일뿐입니다.하지만이 주제에 관해 더 많은 것이 있는지 궁금합니다.

+0

스타일 시트에서 파일로 출력 할 경우 단일 CR resp로 된 두 번째 버전이 필요합니다. LF. –

답변

5

2.0 사양은 출력 메소드 텍스트에서 라인 끝이 어떻게 표현 될지 구현에 따라 정의된다는 것을 명시합니다 (구체적으로는 "데이터 모델의 인스턴스에서 줄 바꿈 문자는 일반적으로 선택한 시스템 환경에서 끝나는 행을 나타내는 데 사용됩니다. ").

XSLT 1.0은 아무 것도 말하지 않습니다 (실제로는 다르지 않습니다).

일부 구현에서는 일관되게 단일 개행을 사용하고, 일부는 요구 한 것과 정확히 일치하는 출력을, 일부는 실행중인 운영 체제의 기본 행 끝을 사용할 수 있습니다.

+0

Michael, 당신이 참조했던 문서를 찾아서 참조 용으로 추가했습니다 : [xslt-xquery-serialization] (http://www.w3.org/TR/xslt-xquery-serialization/) – Maestro13