XLST에서 인쇄 할 수없는 문자를 생성하십시오
-
12-09-2019 - |
문제
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="/"></xsl:template>
</xsl:stylesheet>
다음 오류가 발생합니다.
[Fatal Error] :4:35: Character reference "" is an invalid XML character.
ERROR: 'Character reference "" 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 환경 내에서 항상 작업하고 다른 곳에서 변경을 요구하는 대신 스타일 시트가 모든 환경에서 환경 지원이 필요하지만 모두 변경되지 않은 작업을 수행 할 수 있음을 의미합니다.
나는 그 트레이드 오프의 어느 쪽이 내가 작업하는 일에 어떤 측면이 바람직한 지 확실하지 않다.