0

この問題に関連する投稿をいくつか見つけましたが、解決策を見つけることができませんでした。問題は、character() 関数で、ch[] 配列に最後の呼び出しの不完全な要素または最後の要素が含まれていることです。これは時々発生しますが、98% の場合は正常に動作します。ファイル名には特別な文字や奇妙な名前はありません。

もし私たちが持っているなら、

<tag>image1test.jpg<tag> 
<tag>image2bla.jpg<tag>

機能している場合、char配列には適切な値が含まれていますが、そうでない場合、例の2番目のタグに対して文字関数が呼び出されると、

[i,m,a,g,e,2,b,e,s,t](最後の呼び出しからの残りの文字)

それを解決する方法は?ありがとう。

@Override
public void characters(char ch[], int start, int length) {
if(this.v_new){
myNewsXMLDataSet.setNews(new String(ch, start, length));

}
4

1 に答える 1

1

characters(char[],int,int)パーサーは、ハンドラーを 1 回だけ呼び出す必要はありません。複数の呼び出しが予想され、endElement()メソッドが呼び出された後にのみ値を処理する必要があります。

public class Handler extends DefaultHandler {

    private StringBuilder sb = new StringBuilder();
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        sb.append(ch, start, length);

    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        doStuffWith(sb.toString());
        sb = new StringBuilder();
    }
}
于 2012-12-05T13:41:06.620 に答える