1

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:text要素、xslt-2文字マップ、いくつかの異なるエンコーディングの有無にかかわらず、実際の文字1でも試しましたが、バイナリでASCII文字を取得する方法がわかりません。コード=1。

出力を後処理する必要がありましたが、これは理想的ではありません。

XSLTから単一の低次の印刷不可能な文字出力を生成する方法はありますか?

環境:Java 6、XSLTransformerに組み込まれています。

4

2 に答える 2

3

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>
于 2009-07-09T12:56:44.310 に答える
1

私が思いついた別のオプションは、呼び出し環境が文字 0x01 に設定する xsl:param を使用することです。

これは、常に Java 環境内で作業し、他の場所で変更を必要とする代わりに、スタイルシートはすべての環境で環境サポートを必要としますが、それらすべてで変更せずに機能することを意味します。

そのトレードオフのどちら側が、私が取り組んでいるものに適しているかはまだわかりません.

于 2009-07-12T08:16:29.260 に答える