2011-07-04 6 views
3

xsl:copy-of 안에 해당 값을 사용하는 경우 disable-output-escaping을 보존하는 문제가있는 것 같습니다.XSLT - 사본에서 비활성화 출력 이스케이프 처리 유지하기

여기 내 코드입니다 :

<xsl:call-template name="Display"> 
    <xsl:with-param name="text"> 
     <xsl:value-of select="content" disable-output-escaping="yes" /> 
    </xsl:with-param> 
</xsl:call-template> 

<xsl:template name="Display"> 
    <xsl:param name="text" /> 
    <span><xsl:copy-of select="$text" /></span> 
</xsl:template> 

그들이 xsl:copy-of 문에 사용 할 때 탈출하는 xsl:value-of 문에서 그대로 유지 된 특수 문자.

<xsl:value-of select="$text" disable-output-escaping="yes">이 표시됩니다 : 예를 들어

<xsl:copy-of select="$text"> è &#232

를 표시합니다 나는이 주변에 어떤 방법이 있는지 알고 싶습니다?

답변

3

Spec에 따라 disable-output-escaping 속성은 <xsl:value-of><xsl:text> 명령어에만 지정할 수 있습니다.

DOE는 매개 변수 값을 설정하는 것이 아니라 실제로 값을 출력하는 xslt 명령에서만 필요합니다.

솔루션 :

바꾸기 :

<span><xsl:copy-of select="$text"/></span> 

로 :

<span><xsl:value-of select="$text" disable-output-escaping="yes"/></span> 

주의 마십시오 : 일반적으로 하나의 DOE를 사용하지 않아야합니다, 그것은 XSLT 아키텍처 모델을 나누기로하고 일반적으로 필요하지 않습니다. 또한 DOE 기능은 필수는 아니며 모든 XSLT 1.0 프로세서가 지원하지는 않습니다.

참고 2 : 실제로 DOE가 필요하지 않습니다. XSLT 변환 결과는 예상대로 브라우저에 표시되어야합니다.

0

disable-output-escaping은 텍스트 노드가 전달 될 때 serializer의 동작을 제어합니다. 예를 들어 임시 트리에 추가 될 때와 같이 텍스트 노드가 serializer에 전달되지 않을 때는 의미가 없습니다.