Android中的XmlPullParser
我想从中解析xml,但我得到的结果如下: “新移民 最后更新:5月28日下午6:45“ 我没有足够的声誉,所以我只能发表文字而不是图片。请原谅 我是Android的新手,所以我从网站上复制了代码并做了一些修改来解析上面的xml数据。我读了别人的问题,认为问题出在“频道”标签上,但经过一些修改后,一切都没有改变。以下是核心代码:Android中的XmlPullParser,android,xmlpullparser,Android,Xmlpullparser,我想从中解析xml,但我得到的结果如下: “新移民 最后更新:5月28日下午6:45“ 我没有足够的声誉,所以我只能发表文字而不是图片。请原谅 我是Android的新手,所以我从网站上复制了代码并做了一些修改来解析上面的xml数据。我读了别人的问题,认为问题出在“频道”标签上,但经过一些修改后,一切都没有改变。以下是核心代码: private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserExceptio
private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
List<Entry> entries = new ArrayList<Entry>();
parser.require(XmlPullParser.START_TAG, ns, "rss");
parser.next();//I add this statement to pass the channel tag but it doesn't work
while (parser.next() != XmlPullParser.END_TAG) {
String name = parser.getName();
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
// Starts by looking for the entry tag
if (name.equals("item")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "item");
String title = null;
String description = null;
String link = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("title")) {
title = readTitle(parser);
} else if (name.equals("description")) {
description = readDescription(parser);
} else if (name.equals("link")) {
link = readLink(parser);
} else {
skip(parser);
}
}
return new Entry(title, description, link);
}
private List readFeed(XmlPullParser解析器)抛出XmlPullParserException,IOException{
列表项=新的ArrayList();
require(XmlPullParser.START_标记,ns,“rss”);
parser.next();//我添加此语句以传递通道标记,但它不起作用
while(parser.next()!=XmlPullParser.END_标记){
String name=parser.getName();
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
//首先查找条目标记
如果(名称等于(“项目”)){
add(readEntry(解析器));
}否则{
跳过(解析器);
}
}
返回条目;
}
私有条目readEntry(XmlPullParser解析器)抛出XmlPullParserException,IOException{
require(XmlPullParser.START_标记,ns,“item”);
字符串标题=null;
字符串描述=null;
字符串链接=null;
while(parser.next()!=XmlPullParser.END_标记){
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String name=parser.getName();
如果(名称等于(“头衔”)){
title=readTitle(解析器);
}else if(name.equals(“description”)){
description=readDescription(解析器);
}else if(name.equals(“link”)){
link=readLink(解析器);
}否则{
跳过(解析器);
}
}
返回新条目(标题、说明、链接);
}
如果有人能帮忙,我将不胜感激。问题在于方法
readFeed
,应该是:
private List<Item> readFeed(XmlPullParser parser) throws IOException, XmlPullParserException {
List<Item> items = new ArrayList();
parser.require(XmlPullParser.START_TAG, null, "rss"); // first start tag begin with <rss>
parser.nextTag();
parser.require(XmlPullParser.START_TAG, null, "channel");// second is <channel>
while (parser.next() != XmlPullParser.END_TAG) { // if encounter </channel>, stop
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.d(TAG, "start tag: " + name);
// Starts by looking for the item tag
if (name.equals("item")) {
items.add(readItem(parser));
} else {
skipTag(parser);
}
}
return items;
}
private List readFeed(XmlPullParser解析器)抛出IOException、XmlPullParserException{
列表项=新建ArrayList();
require(XmlPullParser.START_标记,null,“rss”);//第一个开始标记以开头
parser.nextTag();
require(XmlPullParser.START_标记,null,“channel”);//第二个是
while(parser.next()!=XmlPullParser.END_标记){//如果遇到,请停止
if(parser.getEventType()!=XmlPullParser.START_标记){
继续;
}
String name=parser.getName();
Log.d(标签,“开始标签:”+名称);
//首先查找项目标记
如果(名称等于(“项目”)){
add(readItem(解析器));
}否则{
skipTag(解析器);
}
}
退货项目;
}
尝试将解析器初始化中的“rss”更改为“channel”:parser.require(XmlPullParser.START_标记,ns,“channel”);我做了,但这次什么也没出现。谢谢你的帮助。你试过调试吗?对不起,我弄错了,“新来的”是我自己发的,不是解析的结果。所以现在实际上我什么也得不到。我想我最好仔细阅读android.com上的教程。我在这里找到了答案: