3

SAX パーサーを使用して RSS フィードを解析しようとしています

これは私のコードです:

public class MainActivity extends Activity {
    ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
    ListView list;
    ArrayList<String> sinlgeItem = null;
    ProgressDialog pd;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list=(ListView)findViewById(R.id.list);
        boolean b=parseData();
        Log.v("result", "value"+b);
        for(int i=0;i<data.size();i++){
            Log.e("ITEM",data.get(i).get(0)+"__"+data.get(i).get(1));
        }
    }
    /**
     * method parse the data
     */
    private boolean parseData() {
        try {
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser sp = spf.newSAXParser();
            XMLReader xr = sp.getXMLReader();
            URL url = new URL("https://itunes.apple.com/WebObjects/MZStore.woa/wpa/MRSS/newreleases/sf=143441/limit=25/rss.xml");
            xr.setContentHandler(new MyHandler());
            xr.parse(new InputSource(url.openStream()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return true;
    }

    public class MyHandler extends DefaultHandler{
        Boolean ITEM=false;
        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
        }
        @Override
        public void endElement(String uri, String localName, String name) throws SAXException {
            super.endElement(uri, localName, name);
            if (ITEM){
                RootElement root=new RootElement("rss");
                Element chan=root.getChild("channel");
                Element itms=chan.getChild("item");
                Element title=itms.getChild("title");
                Element artist=itms.getChild("http://phobos.apple.com/rss/1.0/modules/itms/", "artist");
                title.setEndTextElementListener(new EndTextElementListener() {
                    public void end(String body) {
                        sinlgeItem.add(body);
                        Log.v("title",body);
                    }
                 });
                 artist.setEndTextElementListener(new EndTextElementListener() {
                     public void end(String body) {
                         sinlgeItem.add(body);
                         Log.v("artist", body);
                     }
                 });
                 ITEM=false;
                 data.add(sinlgeItem);
             }
         }

         @Override
    public void startDocument() throws SAXException {
        super.startDocument();

    }

    @Override
    public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
             super.startElement(uri, localName, name, attributes);
             if (localName.equals("item")){
                 sinlgeItem = new ArrayList<String>();
                 ITEM=true;
             }
         }
     }
}

これは、xml フィードへのリンクです https://itunes.apple.com/WebObjects/MZStore.woa/wpa/MRSS/newreleases/sf=143441/limit=25/rss.xml

item タグ内の title 要素と item タグ内の要素を解析しようとしてitms:artistいます。
名前空間を持つタグの扱い方がわからない

4

2 に答える 2

2

次の例を参照してください

RSSFeed 解析の例

シンプルな RSSReader の例

RSS フィードの読み取りに関する完全なガイド

RSSFeedsでニュース&動画を表示

于 2012-10-16T04:24:40.027 に答える
1

RSS の解析に SAXParser を使用するべきではないと思います。XML プル パーサーを使用する方が簡単です。SAX は不完全で継続的な XML の解析に最適であるため、XMPP プロトコルのような継続的なクライアント/サーバー通信の解析には SAXParser を選択します。

于 2012-10-16T03:59:09.917 に答える