私は XMLEventReader を持っています。これは、「UTF8」エンコーディングの XMLInputFactory から構築されています。「エンコーディング」属性が「UTF-8」に設定されているXMLファイルを読み取るために使用しています。
XML ファイルが Firefox で正しく表示されることを確認しました。ページのエンコードを見ると、UTF-8 と表示されています。
XMLEventReader を設定して、次のような文字イベントを合体させました。
reader.setProperty(XMLEventReader.IS_COALESCING, Boolean.TRUE);
XML ドキュメントに DTD がありません。有効です。
XMLEventReader は、CHARACTERS イベントを受信したことを時折報告します。その内容は (引用符を除いたもの) です。次に例を示します。
r problems were most severe and frequent.) Did you sleep a lot more than usual nearly every night during that period?</text> Ð
サンプルの末尾近くにマークアップ タグがあり、大文字のとげがあることに注意してください。文が切り取られていることにも注意してください。おそらく、このイベントの前に、文の先頭部分を含む別の CHARACTERS イベントがあったと思われます。
XMLEventReader が解析を台無しにするのはなぜですか? 文字が正しく表示されないのはなぜですか? XMLEventReader が CHARACTERS イベントを結合しないのはなぜですか? なぜ StAX は信じられないほど醜く予測不可能なのか?
Mac で Java ランタイム (Java 6) から提供された XMLEventReader を使用しています。
ここにいくつかのサンプル XML があります。もちろん、これは単にエディターからコピーしたものなので、その結果としてどのような文字変換が発生したかは誰にもわかりませんが、とにかく:
<question id="BMHPD17">
<permittedResponseCount>1</permittedResponseCount>
<text>It’s hard for me to stay out of trouble. (Would you say this is true or false for you?)</text>
<namedAnswerSet idref="TrueFalse"></namedAnswerSet>
</question>
3 行目の「スマート アポストロフィー」に注意してください。
CHARACTERS イベントに反応し、その内容をスタック上の文字列に保存してから、「質問」という名前の END_ELEMENT イベントに反応して、これを読んでいます。question の END_ELEMENT イベントを受け取ると、先ほど説明した String の値を取得し、先ほど説明した文字列を入力として受け取る Java オブジェクトを作成します。
結果を System.out.println() すると、(ときどき) 前述の偽のジャンクが表示されます。
「UTF8」エンコーディング セットを使用して System.out を PrintWriter 内にラップすると、プラットフォームのエンコーディングに従って単純に文字を出力するのではなく、同じ結果が得られます。