3

Android用のRSSリーダーを作成しようとしています。だから私はrss ulrに接続してXML情報を取得しています。これはリンクです - http://www.bulgarianhistory.org/feed/ ソースを表示するために開くと、content:encodedというタグが 1 つあることがわかります。このタグ内の情報を取得するにはどうすればよいですか? 私のコードはそれをスキップします! SAXを使用しています。そして、これは私のパーサークラスです:

public class RSSParser extends DefaultHandler {
    private final static String TAG_ITEM = "item";
    private final static String[] xmltags = { "title", "link", "pubDate", "description", "content" };

    private RSSItem currentitem = null;
    private ArrayList<RSSItem> itemarray = null;
    private int currentindex = -1;
    private boolean isParsing = false;
    private StringBuilder builder = new StringBuilder();

    public RSSParser(ArrayList<RSSItem> itemarray) {
        super();

        this.itemarray = itemarray;
    }

    @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);

            if(isParsing && -1 != currentindex && null != builder)
            {
                builder.append(ch,start,length);
            }
        }

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

            if(localName.equalsIgnoreCase(TAG_ITEM))
            {
                currentitem = new RSSItem();
                currentindex = -1;
                isParsing = true;

                itemarray.add(currentitem);
            }
            else
            {
                currentindex = itemIndexFromString(localName);

                builder = null;

                if(-1 != currentindex)
                    builder = new StringBuilder();
            }
        }

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

            if(localName.equalsIgnoreCase(TAG_ITEM))
            {
                isParsing = false;
            }
            else if(currentindex != -1)
            {
                if(isParsing)
                {
                    switch(currentindex)
                    {
                        case 0: currentitem.title = builder.toString();                 break;
                        case 1: currentitem.link = builder.toString();                  break;
                        case 2: currentitem.date = builder.toString();                  break;
                        case 3: currentitem.description= builder.toString();            break;
                        case 4: currentitem.content = builder.toString();               break;
                    }
                }
            }
        }

    private int itemIndexFromString(String tagname){
        int itemindex = -1;

        for(int index= 0; index<xmltags.length; ++index)
        {
            if(tagname.equalsIgnoreCase(xmltags[index]))
            {
                itemindex = index;

                break;
            }
        }

        return itemindex;
    }
}
4

2 に答える 2

1

私がSax覚えている限り、Androidでのパフォーマンスは非常に遅いので、Androidでは使用しないことを強くお勧めします。XmlPullParserに付属しているものを使用する必要がAndroidあるため、外部を追加する必要はなく、jarsパフォーマンスが大幅に向上します。テストしたばかりで、他のタグと同じようにタグをXmlPullParser解析するので、機能します。<content:encoded>

于 2012-10-25T14:22:53.683 に答える
1

名前空間を持つタグがあなたのによって無視されているようifです。ここにタグ名を印刷してみてください

 private int itemIndexFromString(String tagname){
        int itemindex = -1;

        for(int index= 0; index<xmltags.length; ++index)
        {
            **PRINT (tagname)**
            if(tagname.equalsIgnoreCase(xmltags[index]))
            {

として出力される場合は、代わりにinlcudeにcontent:encoded変更する必要がありますxmltags []content:encodedcontent

于 2012-10-25T16:34:38.430 に答える