2012-03-06 11 views
-1

私は、java.util.zipクラスを使用してJavaでMicrosoft DOCXファイルを正常に読み込んでいます。 MS XMLをXSLTを使用して必要なものに変換することから始めます。私はHTMLを出力しているので、ndash、ldquo、rdquo、egrave、eacute、uuml、aumlなど何もしなくても、明白な文字のほとんどがXSLTによって正しくエスケープされていることに気づきます。 XSLT出力をさらに処理します。Java XSLTフランス語、ドイツ語、ギリシャ語を同じ文書でどのようにエスケープできますか?

私の問題は、フランス語とドイツ語に加えて、私もギリシャ語があることです。ギリシャ語はXSLTによってエスケープされませんが、XSLT出力に正しく表示されます。エクリプスやノートパッドを使って結果ファイルを編集すると、エスケープされていないギリシャ語が正しく表示されます。しかし...

JavaコードでXSLT出力を処理すると、ギリシャ語がスクランブルされ、ページが誤ってエンコードされた場合に表示される通常のランダムな文字が保存されます。

明らかに私はこれを正しい方法でエンコードしていません。 ISO-8859-1のすべての文字がエスケープされているので、私はUTF-8でそれをやろうとしています。

誰かが私が間違っているかもしれないと示唆できますか? XSLTが私のためにギリシア文字をエスケープする方法はありますか?

+1

あなたが間違っているのは、正規表現でHTMLを処理していることです... –

+0

あなた自身のやや謎めいたコメントをありがとうございます。それにバンがあるということですか?文書化された制限がありますか?それともあなたの意見ですか? – casgage

答えて

1

xsltの出力エンコーディングを "us-ascii"に設定しようとしましたか?そうすれば、対応する文字エンティティを使用して非ASCII文字以外のすべての文字をエスケープする必要があります。

しかし、実際の問題は、結果のXML/HTMLで正規表現を使用しています。この処理は、xmlおよびエンコード対応のツールを使用するか、xslトランスフォーメーションの一部として行ってください。ほとんどのJava XSLTプロセッサは、変換内からJava関数の呼び出しを可能にします。

0

disable-output-escapingの属性をxsl:value-ofxsl:textにすることができます。

<xsl:value-of select="expression" disable-output-escaping="yes|no" /> 

デフォルト値は "no"なので、出力でエスケープ文字を取得するには、それを積極的に "yes"に設定する必要があります。

+0

Microsoft XMLを読み込んで処理するコードを書き直すことで問題を解決し、ISO-8859-1に表示されていない文字をエスケープすることができる時点までコードを認識できるようにしました。その後、私は正規表現を使用することが安全であることを知っています。結果として、私のアプリは、800以上のHTMLページを生成することができます。合計で400万語以上、50秒未満です。ある日JAXBの本をもう一度出すかもしれませんが、いつそのようになるのか分かりません。 JAXBコードを書いたので、コード行の3倍から5倍はかかると推定しています。 – casgage

関連する問題