我想解析一个RSS源。我的问题是如何解析在
考虑到这个非常简单的XML:
这个方法几乎可以工作,但有时候即使在RSS XML中相应的元素存在时也不会初始化所有元素!下面的代码有问题吗?
<item>
和</item>
标签之间的所有标签。考虑到这个非常简单的XML:
<?xml version="1.0" ?>
<rss version="2.0">
<channel>
<title>MyRSSPage</title>
<link>http://www.example.com</link>
<item>
<link>www.example.com/example1</link>
<title>Example title 1</title>
</item>
<item>
<link>www.example.com/example2</link>
<title>Example title 2</title>
</item>
</channel>
</rss>
我想解析只在 <item>...</item>
标签之间的内容。
List<RssMessage> messages = new ArrayList<RssMessage>();
// parser is a XmlPullParser instance
while(parser.next() != XmlPullParser.END_DOCUMENT) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// START OF HEADER
if(name.equals("title")) {
title = parser.nextText();
}
else if(name.equals("link")) {
link = parser.nextText();
}
else if(name.equals("description")) {
description = parser.nextText();
}
else if(name.equals("language")) {
language = parser.nextText();
}
else if(name.equals("copyright")) {
copyright = parser.nextText();
}
else if(name.equals("pubDate")) {
pubdate = parser.nextText();
}
// END OF HEADER
else if(name.equals("item")) {
RssMessage rssMessage = processItem(parser);
messages.add(rssMessage);
}
}
在下面的方法中,我只想解析<item>...</item>
标签中的标记。如何构建一个循环,只遍历在<item>
和</item>
之间的项目?
编辑 这个方法几乎可以工作,但有时候即使在RSS XML中相应的元素存在时也不会初始化所有元素!下面的代码有问题吗?
private RssMessage processItem(XmlPullParser parser) throws IOException, XmlPullParserException {
RssMessage rssMessage = new RssMessage();
parser.require(XmlPullParser.START_TAG, ns, "item");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if(name.equals("link")) {
rssMessage.setLink(parser.nextText());
}
else if(name.equals("guid")) {
rssMessage.setGuid(parser.nextText());
}
else if(name.equals("category")) {
rssMessage.setCategory(parser.nextText());
}
else if(name.equals("title")) {
rssMessage.setTitle(parser.nextText());
}
else if(name.equals("pubDate")) {
rssMessage.setPubDate(parser.nextText());
}
}
return rssMessage;
}
<item>
和</item>
之间的标签之外,一切都没问题。 - Rox