无法解析Android的RSS源

时间:2012-02-19 19:16:05

标签: android xml rss xml-parsing document

好的,所以我试图解析这个feed的android应用程序:

我正在使用此代码执行此操作:

    protected List<GamestarFeedItem> doInBackground(Context... params) {
    context = params[0];
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    List<GamestarFeedItem> items = new ArrayList<GamestarFeedItem>();
    test = new ArrayList<String>();
    try {
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(new URL("http://rss.feedsportal.com/c/370/f/5299/index.rss").openConnection().getInputStream());
        //Document document = builder.parse(new URL("http://www.gamestar.de/rss/gamestar.rss").openConnection().getInputStream());
        Element root = document.getDocumentElement();
        NodeList docItems = root.getElementsByTagName("item");          
        Node nodeItem;

        for(int i = 0;i<docItems.getLength();i++){
            nodeItem = docItems.item(i);

            if(nodeItem.getNodeType() == Node.ELEMENT_NODE){
                GamestarFeedItem feedItem = new GamestarFeedItem();
                NodeList element = nodeItem.getChildNodes();                    
                feedItem.setTitle(element.item(0).getFirstChild().getNodeValue());
                feedItem.setSummary(element.item(2).getNodeValue());
                feedItem.setLink(element.item(1).getFirstChild().getNodeValue());                   feedItem.setDate(element.item(3).getFirstChild().getNodeValue());
                //feedItem.setImage(element.getChild(""));
                test.add(element.item(0).getFirstChild().getNodeValue());
                String aaa = element.item(2).getNodeName(); 
                items.add(feedItem);
            }
        }
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return items;
}

现在,到目前为止一切正常,除了这一行:

feedItem.setSummary(element.item(2).getNodeValue());

只返回一个<而不是描述,并且通过这一行,我知道我正在尝试提取正确的元素:

String aaa = element.item(2).getNodeName();

现在,这是一个这样的描述的例子:

&lt; a href =“http://www.gamestar.de/news/vermischtes/2564931/gamepro_apps_fuer_ios_und_android.html”&gt;&lt; img align =“left”hspace =“5”src =“http:/ /images.idgentertainment.de/images/idgwpgsgp/bdb/2275036/127x.jpg"/></a> Aktuelle News,Spiele-Tests,Previews und Releases for Xbox 360,PlayStation 3 und Vita sowie Nintendo-Systeme auch unterwegs immer dabei:Ab jetzt sind kostenfreie GamePro-Apps im Android Market und iniTunesverfügbar。&lt; img width ='1' height ='1'src ='http://rss.feedsportal.com/c/370/f/5299/s/1cbb8bf0/mf.gif'border ='0'/&gt;&lt; div class ='mf-viral'&gt;&lt; table border ='0'&gt;&lt; tr&gt;&lt; td valign ='middle'&gt;&lt; a href =“http://share.feedsportal.com/viral/sendEmail.cfm?lang=de&title=GamePro-Apps+f%C3%BCr+iOS+und+机器人+ - + +奥夫DEM +智能手机+高达最新+在+ DER +世界报+ DER + Konsolen-免费游戏&安培;链接= HTTP%3A%2F%2Fwww.gamestar.de%2Fnews%2Fvermischtes%2F2564931%2Fgamepro_apps_fuer_ios_und_android.html “target =”_ blank“&gt;&lt; img src =”http://rss.feedsportal.com/images/emailthis2.gif“border =”0“/&gt;&lt; / a&gt;&lt; / td&gt;&lt; td valign ='middle'&gt;&lt; a href =“http://res.feedsportal.com/viral/bookmark_de.cfm?title=GamePro-Apps+f%C3%BCr+iOS+und+Android+-+Auf + DEM +智能手机+高达最新+在+ DER +世界报+ DER + Konsolen-免费游戏&安培;链接= HTTP%3A%2F%2Fwww.ga mestar.de%2Fnews%2Fvermischtes%2F2564931%2Fgamepro_apps_fuer_ios_und_android.html“target =”_ blank“&gt;&lt; img src =”http://rss.feedsportal.com/images/bookmark.gif“border =”0“/&gt ;&lt; / a&gt;&lt; / td&gt;&lt; / tr&gt;&lt; / table&gt;&lt; / div&gt;&lt; br /&gt;&lt; br /&gt;&lt; a href =“http:// da。 feedsportal.com/r/126178574663/u/355/f/5299/c/370/s/1cbb8bf0/kg/300/a2.htm"><img src =“http://da.feedsportal.com/ r / 126178574663 / u / 355 / f / 5299 / c / 370 / s / 1cbb8bf0 / kg / 300 / a2.img“border =”0“/&gt;&lt; / a&gt;&lt; img src =”http:/ /da.feedsportal.com/r/126178574663/u/355/f/5299/c/370/s/1cbb8bf0/kg/300/a2t.img"border =“0”/&gt;

那么,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。

由于“描述”的格式,它实际上由多个子项组成,所以你只需将这些子项提取到一个Nodelist中并循环遍历它们的内容并解决问题

    String bbb = new String();
    NodeList desc = element.item(2).getChildNodes();
    for(int j = 0;j<desc.getLength();j++){
        bbb += desc.item(j).getNodeValue();
    }