在Android中使用的SAXParser解析XML时,空字符串结果 [英] Empty string result when parsing XML using SAXParser in Android
本文介绍了在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屋!
查看全文