2011-07-19 12 views
2

SAXParserまたはXMLReaderでquit()関数を呼び出す方法はありますか?DefaultHandler内の解析を停止または終了する方法はありますか?

XML文書は毎日更新されるだけであり、要素が変更されている場合は、完全な文書を読み込みたいだけです。私のデフォルトのハンドラ内

@Override 
public void endElement(String uri, String localName, String qName) 
throws SAXException { 

    if (localName.equals("pubDate")) { 
     if (currentValue.equals(mPreviousPubDateValue)) { 
       //exit parsing 
     } 
    } else { 
     //keep on parsing 
    } 


} 

XMLドキュメントはかなり大きく、私はそれを終了することができるようにしたいと思います。 DefaultHandlerには、解析を停止するためのビルトインはありません。 XMLReaderへの参照を渡すこともできますが、XMLReader自体を停止するメソッドもありません。

ありがとうございます!

+0

ランダム解析例外ためにあなたの決定をしていないあなたが解析を保証するために、そのサブクラスを使用することができます

を失敗したの解析を停止するSAXExceptionを投げることができます。日付のテストの中で?あなたは操作を中断し、新しいデータがないことを示します。 –

答えて

4

あなたは1つのブレークを追加することについてどう

+0

うん、これをして、それは働いた。甘くてシンプル! – Civilian

1

(ratchetfreaksが答えのようにあなたがSAXExceptionのをスローすることによってこれを行うもちろん、次は無視してください)

興味深い質問 - あなたのパーサがある場合

-

私は1つの方法を考えることができますInputStreamから読み込み、ラッパーにフラグを設定するまで、呼び出しを渡す別のInputStreamへのラッパーである独自のクラスを作成します。フラグが設定されていると、ラッパーは呼び出し元にEOFを示します。次に、このラッパーへの参照をデフォルト・ハンドラーに組み込み、ラップされたストリームをパーサーに渡します。あなたのハンドラがそれ以上読み取る必要がないと判断した場合、ラッパーにフラグをセットします。これはパーザにEOFを送り、解析を中止します(おそらく例外をスローします)。

実行可能な、醜い解決策です。たぶん誰か他に何かありますか?

+1

もちろん、InputStreamではなくXMLReaderをラップすることができます。 – antlersoft

+0

編集リンクが理由あり;) –

+0

あなたのアイデアは好きですが、例外をスローするのはずっと簡単でした。 :) – Civilian

関連する問題