質問

私は(私がの制御ではないんだけど、ファイル形式)ファイルを生成するために、XSLTのテキスト出力を使用しようとしている、そしてそれはほとんどがテキストである一方で、それはフラグとして低次の非印刷可能な文字が含まれ、 (XSLTの仕様に応じて)XLSTファイル内で有効でない文字を含めます。

以下のようなものが機能するために

私が欲しいが、代わりにそれは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'

私は実際、あまりにも文字1、CDATAセクションの有無にかかわらず、XSLで試してみた:テキスト要素、XSLT-2文字のマップ、異なるエンコーディングのカップルが、私は、ASCIIを取得する方法を見つけ出すことはできませんバイナリコードの文字= 1。

私は理想的ではありません後処理私の出力に頼らなければならなかった。

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

環境:XSL Transformerで構築された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>

他のヒント

私が作ってみた別のオプションは、XSLを使用することです:PARAM呼び出し元の環境には、文字が0x01に設定されます。

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

私はまだ私が働いている何のために好適であることはトレードオフのどちら側かわからない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top