문제

XSLT 텍스트 출력을 사용하여 파일을 생성하려고합니다 (제어하지 않은 파일 형식으로). 대부분 텍스트이지만 인쇄 할 수없는 문자가 저격 할 수없는 문자를 포함하여 문자를 포함하여 문자를 포함합니다. XLST 파일 내에서 유효하지 않습니다 (XSLT 사양에 따라).

아래가 작동하고 싶지만 XSLT 파일에는 허용되지 않는 문자가 포함되어 있기 때문에 유효한 XSLT 파일이 아닙니다.

<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text" encoding="US-ASCII"/>
  <xsl:template match="/">&#1;</xsl:template>
</xsl:stylesheet>

다음 오류가 발생합니다.

[Fatal Error] :4:35: Character reference "&#1" is an invalid XML character.
ERROR:  'Character reference "&#1" is an invalid XML character.'
FATAL ERROR:  'Could not compile stylesheet'

CDATA 섹션, XSL : 텍스트 요소, XSLT-2 문자 맵, 몇 가지 다른 인코딩이 있거나없는 실제 문자 1도 시도했지만 이진으로 ASCII 문자를 얻는 방법을 알 수 없습니다. 코드 = 1.

나는 출력 후 처리에 의지해야했는데, 이는 이상적이지 않습니다.

XSLT에서 단일 저격자가 아닌 인쇄 할 수없는 문자 출력을 생성 할 수있는 방법이 있습니까?

환경 : XSL 변압기에 내장 된 Java 6.

도움이 되었습니까?

해결책

XSLT에서 Java 클래스의 정적 메소드를 호출 할 수 있습니다. 예를 들어 다음 해킹을 사용하여 출력 스트림에 0x01을 쓰십시오.

<?xml version="1.0" encoding="US-ASCII" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:char="java.lang.Character" version="1.0">
    <xsl:output method="text" encoding="US-ASCII" />
    <xsl:template match="/">
        <xsl:value-of select="char:toString(1)"></xsl:value-of>
    </xsl:template>
</xsl:stylesheet>

다른 팁

내가 생각해 낸 또 다른 옵션은 호출 환경이 문자 0x01로 설정하는 xsl : param을 사용하는 것입니다.

이는 항상 Java 환경 내에서 항상 작업하고 다른 곳에서 변경을 요구하는 대신 스타일 시트가 모든 환경에서 환경 지원이 필요하지만 모두 변경되지 않은 작업을 수행 할 수 있음을 의미합니다.

나는 그 트레이드 오프의 어느 쪽이 내가 작업하는 일에 어떤 측면이 바람직한 지 확실하지 않다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top