2011-08-09 8 views
1

可能性の重複:私は次の構文を使用してXMLファイルを持っている
JAVA SAX parser split calls to characters()サックス文字壊す要素離れ

<tag ...> 
a bunch of text here 
<tag ...> 

を任意の終了タグはありませんtagの場合私は2つのタグの間のテキストをつかんで、List<String>characters()に保存しています。ほとんどの場合動作しますが、一部のXMLファイルでは、テキストを2つに分割する行終端文字などを読み取ります。 1つのエントリを格納するのではなく、「ここにテキストの集まり」という2つのエントリがあります。「一束」と「ここにテキスト」。違いは、他のすべてのエントリとは異なり、 "a bundle of"の後、または "text here"の前に改行を保存しないことです。

これを修正する必要がありますが、その仕組みはわかりません。私はあなたの助けに感謝します。

答えて

1

パーサーは、要素テキストの各文字列に対してContentHandler文字メソッドを複数回呼び出すことができますが、必ず行終端文字を検出できません。 the Java tutorial on SAXには文字メソッドの短い説明があります。

パーサーは、一度に特定の文字数を返す必要はありません。パーサーは、一度に1文字から数千までの何かを返すことができ、依然として標準に準拠した実装です。したがって、アプリケーションが見る文字を処理する必要がある場合は、characters()メソッドをjava.lang.StringBufferに文字を蓄積させ、すべてが見つかった場合にのみ操作してください。

また、this Javaworld articleには、説明と例があります。

+0

私はこの「機能」について別の記事で読んだところです。どうすればこの問題を解決できますか? 'startElement'の次の呼び出しで' List 'にテキストを追加するだけですか?他の 'startElement'の後に他のチャンクを呼び出せますか? 「すべてが見つかった」ことをどのように知っていますか? – cesar

+0

では、読み込んだ文字を文字列バッファに格納することができます。あなたが要素の終わりを見つけたときにそれらがすべて見つかったことをあなたは知っています。 –

+0

@anonymous:あなたのタグがネストされているので、「あなたは次の要素の始まりを見つけたときにすべてが見つかりました」という意味です。 –