0

Android プラットフォーム用に SAX XML パーサーをセットアップする方法に関する複数のオンライン チュートリアルに従いましたが、どれも機能していないようです。どうしたの?私のコードは次のとおりです。

輸入品:

import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import android.app.Activity;
import android.util.Log;

このコードは、呼び出されることがわかっているメソッドにありますが、logcat に「TESTING」と表示されるのはなぜですか?

 try {
                URL XMLURL = new URL("https://gdata.youtube.com/feeds/api/videos?q=Crystallize+Lindsey+Stirling+Offical+Music+Video&orderby=relevance");
                SAXParserFactory SPF = SAXParserFactory.newInstance();
                SAXParser SP = SPF.newSAXParser();

                DefaultHandler mainHandler = new DefaultHandler(){

                    @Override
                    public void startElement(String uri, String localName,
                            String qName, Attributes attributes)
                            throws SAXException {

                        if(localName.equals("Link")){

                            String possibleURL = attributes.getValue("href");
                            Log.i("TEST","TESTING");
                        }

                    }
                };

                SP.parse(new InputSource(XMLURL.openStream()),mainHandler);
            } catch (Exception e) {
                e.printStackTrace();

            }

助けてくれてありがとう!

4

2 に答える 2

1

これは名前空間の問題です。

SAXParserFactory SPF = SAXParserFactory.newInstance();
SAXParser SP = SPF.newSAXParser();

名前空間を適切に処理しないパーサーを提供しています。

startElement を変更してqName"link" という値を確認すると、コードは機能しますが、これは応急処置のようなものです。

このドキュメントには名前空間がありますが、この要素はドキュメントに指定されたデフォルトの名前空間http://www.w3.org/2005/Atomにあります。

名前空間を認識するパーサーを提供するようパーサー ファクトリに指示する必要があります。

SAXParserFactory SPF = SAXParserFactory.newInstance();
SPF.setNamespaceAware(true);
SAXParser SP = SPF.newSAXParser();

そして、startElementメソッドを変更しなくても期待される結果が得られますが、正しい値を探す必要があります。つまり、「Link」ではなく「link」をチェックする必要があります。

于 2012-10-06T13:52:15.957 に答える
0

黄色のテキストの大きな塊がないか、logcat を確認してください。SAX パーサーをクラッシュさせたエラーについて通知される場合があります。

于 2012-10-06T05:29:09.813 に答える