2012-05-09 13 views
1

javax.xml.transform.Transformerを使用してHTMLコンテンツを取得し、XML文書に解析します(Crouton/TagSoupの組み合わせを使用しています)。これをする)。javax.xml.transform.TransformerがHTMLエンコードされた文字を変換/解析するのを防ぐ方法

私はTransformer.transform()プロセスの出力をダンプし、出力には©のようなものが変換されていることを私は考えていません。実際のシンボル、この場合は著作権シンボルに変換します。

最終的に、このコンテンツはHTMLファイルとして再保存されますが、ファイル内に©が表示される代わりに、この特殊文字はHTML標準を使用するべきではありません。

トランスフォーマーに既にエンコードされたHTML文字を無視させて実際のシンボルに変換させる方法はありますか?

+0

これはあなたの質問に対する回答ではありませんが、なぜ '©'のようなエンティティの代わりに実際の文字を使用するのが問題ですか? – michael667

+0

このプロセスの最終的な目標は、html(不正な形式の可能性があります)を読み込み、coldfusion xmlサポートを使用して変更し、ファイルに書き戻すことです。元のファイルはこれらの文字エンコードを使用しているので、結果のファイルで同じものを使用することをお勧めします。 出力メソッドを "html"に設定すると、これらのエンコーディングが得られますが、有効なxml(またはxhtml)マークアップが得られません(coldfusionで解析できないため)。 – jzimmerman2011

+0

なぜこれらのエンティティが必要ですか?出力ファイルにはどの文字エンコーディングを使用していますか? UTF-8? ISO-8859-1? ASCII? – michael667

答えて

2

XSLT 2.0の場合、文字マップを使用できます。誰かがすべてのHTML文字エンティティを定義する文字マップを作成したと思います。

Saxonを使用することをやめさせることは何もないので、Saxonにはsaxon:character-representation = "entity"があります。これはあなたが望むことをするようです(HTML定義のすべてを理解できませんただし、Latin-1のエンティティのみ)。

+0

これについてもう少し詳しく知りたいですか?私はXMLデータを読み込むための "コンテンツハンドラ"としてSAX2DOMを使用しています。これは私がこの「文字表現」を探している必要がある場所ですか?また、私はSaxonが変圧器工場を持っているのを見ましたが、私はそれを使用しようとしましたが、何もしませんでした... – jzimmerman2011

+0

saxon:XSLT仕様へのすべてのSaxon拡張のような文字表現はSaxon ProfessionalおよびEnterprise Edition無料のホームエディション。ソフトウェアをインストールして動作させている場合は、スタイルシートのxsl:output要素かTransformer.setOutputProperty()APIを使用してソフトウェアを要求できます。 –

2

次のように試してみることができます。transformer.setOutputProperty(OutputKeys.ENCODING, "ASCII")に電話してください。このように、ASCII以外の文字はすべて文字エンティティを使用する必要があります。

0

これは私の元の質問に対する適切な解決策ではありませんが、これは私を救う回避策です。

コンテンツの文字列を送信する前に、エンティティを別の形式に「変換」するために正規表現を使用するため、パーサー/トランスフォーマではエンティティが認識されません。

発信文字列では、別の正規表現を使用してHTMLエンティティに変換するだけです。

関連する問題