現在、SAX を使用してインターネットからデータを取得するアプリを開発しています。以前は、Google Weather API などの単純な XML ファイルを解析するために使用していました。しかし、私が興味を持っている Web サイトは、解析を次のレベルに引き上げています。ページが大きくて見にくいです。特定の行を取得するだけで済みます。残りは私には役に立ちません。
それらの無駄な行/タグをスキップすることは可能ですか、それとも段階的に進む必要がありますか?
7 に答える
私はコモンズダイジェスターが好きです。特定のタグに対するルールを指定できます。タグが検出された場合にのみ、ルールが実行されます。
Digester は sax の上に構築されているため、すべての sax 機能に加えて、特定のタグを選択的に解析するために必要な特異性を備えています。また、対応するタグが検出されたときに新しい要素がプッシュされ、要素が終了するとポップされるスタックも使用します。
すべての構成ファイルを解析するために使用します。
http://commons.apache.org/digester/でダイジェスターをチェックしてください。
はい、できます。興味のないタグは無視してください。ただし、ドキュメント全体を解析する必要があることに注意してください (DefaultHandler impl)。
public startElement(String uri, String localName,
String qName, Attributes attributes) {
if(localName.equals("myInterestingTag") {
// do your thing....
}
}
public void endElement(String uri, String localName, String qName) {
if(localName.equals("myInterestingTag") {
// do your thing....
}
}
public void characters(char[] ch, int start, int length) {
// if parsing myinteresting tag... do some stuff.
}
はい、スキップできます。必要なタグを定義するだけで、それらのタグ値のみがフェッチされます。
バックグラウンドで SAX を使用して xml を解析する XPath の使用を試みることができます。ここでの欠点は、Xpath 評価メソッドを呼び出すたびに XML が解析されることです。
SAXを使用してタグをスキップ/無視する戦略については、同様の質問に対する私の回答を参照してください。
XMLReader で ContentHandler を切り替える必要があります。スキップしたい XML ドキュメントの移植を読むときは、単にイベントを処理しない ContentHandler に入れ替えるだけです。無視するセクションの最後に到達すると、XML コンテンツの処理に使用していたコンテンツ ハンドラーに制御が戻されます。
解析可能な XML ドキュメントを作成するためのTagSoupと、興味深い部分を取得するための XPathの組み合わせを試すことができます。
特定のタグを読み取りたい場合、DOM パーサーは SAX パーサーよりもはるかに高速です.SAX パーサーは、大きな XML ファイルを解析する場合に便利です..