在Android中使用的SAXParser解析XML时,空字符串结果 [英] Empty string result when parsing XML using SAXParser in Android

查看:376
本文介绍了在Android中使用的SAXParser解析XML时,空字符串结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从一个RSS新闻看起来像this.I正在解析为项目的标题,链接,描述和pubdate的现在,我可以从logcat的输出都发现解析数据被解析成空strings.Is它因为CDATA.How我能解决这个问题?

I am attempting to parse data from an RSS news feed which looks like this.I am parsing for item's title,link,description and pubDate Currently,as I can spot from the Logcat output everything gets parsed into empty strings.Is it because of the CDATA.How can I fix this?

    <?xml version="1.0" encoding="UTF-8"?>
     <rss version="2.0">
     <channel>
      <title></title>
      <link></link>
      <description></description>
      <item>
       <title><![CDATA[The news headline is here ]]></title>
       <link></link><!--No CDATA here-->
       <description><![CDATA[News description here]]>
       </description>
       <pubDate><![CDATA[Sat, 14 Sep 2013 10:13:08 +0530]]></pubDate>
      </item>
       ...
      </channel>

我的处理程序是这样的:

My Handler looks like this:

     public class OtherHandler extends DefaultHandler
 {
Item item;
ArrayList<Item> channel;
StringBuffer sb;
boolean isItemOn=false;

OtherHandler()
    {
      super();
      sb=new StringBuffer();
}
public void startElement(String uri,String localName,String qName,Attributes attrs) throws SAXException
{
    String name=localName;
    if("".equals(name))
        name=qName;
    if(qName.equals("channel"))
    {
        channel=new ArrayList<Item>();
    }
    if(qName.equals("item"))
    {
        isItemOn=true;
        item=new Item();
    }

}

public void charecters(char[]ch,int offset,int length) throws SAXException
{
    sb.append(new String(ch,offset,length));
}

public void endElement(String uri,String localName,String qName) throws SAXException
{
    String name=localName;
    if("".equals(localName))
        name=qName;
    if(name.equals("item"))
    {
        isItemOn=false;
        channel.add(item);
    }
    if(name.equals("title"))
    {
        if(isItemOn)
        {
            String title=sb.toString();
            item.setTitle(title);
            Log.d("OtherHandler", "Item Title :"+title);
        }    
    }

    if(name.equals("link"))
    {
        if(isItemOn)
        {
            String link=sb.toString();
            item.setLink(link);
            Log.d("OtherHandler","Item Link :"+link);
        }
    }

    if(name.equals("description"))
    {
        if(isItemOn)
        {
            String desc=sb.toString();
            item.setDescription(desc);
            Log.d("OtherHandler","Item description: "+desc);
        }
    }

    if(name.equals("pubDate"))
    {
        String pubDate=sb.toString();
        item.setPublishedDate(pubDate);
        Log.d("OtherHandler","Item pub date: "+pubDate);
    }
}

}

推荐答案

这是一个接口

public interface ParserData {

    public List<Item> parse();


}

,我实现接口,这是我创建的。

And i am implementing the interface, which i have created.

public class ParseData implements ParserData {
Item item;

InputStream inputstrm = null;

public ParseRSS(InputStream is) {
    inputstrm = is;
}

@Override
public List<Item> parse() {
    // TODO Auto-generated method stub
    RootElement root = new RootElement("channel");
    final List<Item> responsearray = new ArrayList<Item>();
    Element dataset = root.getChild("item");

    dataset.setStartElementListener(new StartElementListener() {

        @Override
        public void start(Attributes attributes) {
            // TODO Auto-generated method stub
            parameter = new Item();
        }
    });
    dataset.setEndElementListener(new EndElementListener() {

        @Override
        public void end() {
            // TODO Auto-generated method stub
            responsearray.add(parameter);
        }
    });

    dataset.getChild("title").setEndTextElementListener(
            new EndTextElementListener() {

                @Override
                public void end(String body) {
                    // TODO Auto-generated method stub
                    parameter.setTitle(body);
                }
            });

    dataset.getChild("link").setEndTextElementListener(
            new EndTextElementListener() {

                @Override
                public void end(String body) {
                    // TODO Auto-generated method stub
                                           if(body != null)
                    parameter.setLink(body);
                }
            });


    try {
        Xml.parse(inputstrm, Xml.Encoding.UTF_8, root.getContentHandler());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return responsearray;
}

这篇关于在Android中使用的SAXParser解析XML时,空字符串结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆