0

このような RSS ニュース フィードからデータを解析しようとしています。アイテムのタイトル、リンク、説明、および pubDate を解析しています。現在、Logcat の出力からわかるように、すべてが空の文字列に解析されます。 CDATA.どうすれば修正できますか?

    <?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>

私のハンドラーは次のようになります。

     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);
    }
}

}

4

1 に答える 1

2

これはインターフェースです

public interface ParserData {

    public List<Item> parse();


}

そして、私が作成したインターフェースを実装しています。

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;
}
于 2013-09-16T06:27:17.067 に答える