Android:如何解析THIS XML PARSE
我想解析RSS提要。我的问题是如何解析<item>
和</item>
标记之间的所有标记。
<channel>
<title>Pub post</title>
<atom:link href="http://abishtpub.wordpress.com/feed/" rel="self"
type="application/rss+xml"/>
<link>http://abishtpub.wordpress.com</link>
<description>A fine WordPress.com site</description>
<item>
<title>multi-content</title>
<media:content url="http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6? s=96&d=identicon&r=G" medium="image">
<media:title type="html">abisht</media:title>
</media:content>
<media:content url="http://abishtpub.files.wordpress.com/2014/06/modern-medicine.jpg?w=300" medium="image">
<media:title type="html">modern-medicine</media:title>
</media:content>
<media:content url="http://abishtpub.files.wordpress.com/2014/06/frisky_nursing_home.jpg?w=300" medium="image">
<media:title type="html">frisky_nursing_home</media:title>
</media:content>
</item>
这是用于解析值的代码。
NOTE:
但我只获得一个<media:content> value
我的问题是如何获取所有<media:content>
代码中的所有<items>
值。
private String readItem(XmlPullParser parser) throws XmlPullParserException, IOException {
RSSItem rssItem = new RSSItem();
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
String result = "";// new SpannedString("");
parser.require(XmlPullParser.START_TAG, null, "item");
while (parser.next()!= XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
Log.d("debug","item:name:"+name);
if (name.equals("title")) {
rssItem.title = readTitle(parser);
}else if(name.equals("link")){
rssItem.link = readlink(parser);
} else if (name.equals("media:content")) {
result = readMedia(parser);
}
}
listData.add(rssItem);
return result;
}
答案 0 :(得分:5)
我刚试过在我的一个帖子下张贴的网址。
这是解析的代码
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
InputStream is = new ByteArrayInputStream(res.getBytes());
xpp.setInput(is,null);
// xpp.setInput(getInputStream(url), "UTF-8");
boolean insideItem = false;
// Returns the type of current event: START_TAG, END_TAG, etc..
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (xpp.getName().equalsIgnoreCase("item")) {
insideItem = true;
} else if (xpp.getName().equalsIgnoreCase("title")) {
if (insideItem)
Log.i("Title is",xpp.nextText());
} else if (xpp.getName().equalsIgnoreCase("link")) {
if (insideItem)
Log.i("Link is",xpp.nextText());
}
else if (xpp.getName().equalsIgnoreCase("comments")) {
if (insideItem)
Log.i("Comment is.",xpp.nextText());
}
else if (xpp.getName().equalsIgnoreCase("pubDate")) {
if (insideItem)
Log.i("Publish Date is.",xpp.nextText());
}
else if (xpp.getName().equalsIgnoreCase("media:content")) {
if (insideItem)
Log.i("Media Content url is.",xpp.getAttributeValue(null, "url"));
}
else if (xpp.getName().equalsIgnoreCase("media:title")) {
if (insideItem)
Log.i("Media Content title.",xpp.nextText());
}
} else if (eventType == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")) {
insideItem = false;
}
eventType = xpp.next(); /// move to next element
}
日志
07-14 12:16:02.683: I/Title is(2204): multi-content
07-14 12:16:02.683: I/Link is(2204): http://abishtpub.wordpress.com/2014/06/20/multi-content/
07-14 12:16:02.683: I/Comment is.(2204): http://abishtpub.wordpress.com/2014/06/20/multi-content/#comments
07-14 12:16:02.693: I/Publish Date is.(2204): Fri, 20 Jun 2014 13:04:07 +0000
07-14 12:16:02.693: I/Media Content url is.(2204): http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
07-14 12:16:02.693: I/Media Content title.(2204): abisht
07-14 12:16:02.693: I/Media Content url is.(2204): http://abishtpub.files.wordpress.com/2014/06/modern-medicine.jpg?w=300
07-14 12:16:02.693: I/Media Content title.(2204): modern-medicine
07-14 12:16:02.693: I/Media Content url is.(2204): http://abishtpub.files.wordpress.com/2014/06/frisky_nursing_home.jpg?w=300
07-14 12:16:02.693: I/Media Content title.(2204): frisky_nursing_home
07-14 12:16:02.693: I/Title is(2204): my next post
07-14 12:16:02.693: I/Link is(2204): http://abishtpub.wordpress.com/2014/06/19/my-next-post/
07-14 12:16:02.693: I/Comment is.(2204): http://abishtpub.wordpress.com/2014/06/19/my-next-post/#comments
07-14 12:16:02.693: I/Publish Date is.(2204): Thu, 19 Jun 2014 13:24:26 +0000
07-14 12:16:02.693: I/Media Content url is.(2204): http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
07-14 12:16:02.693: I/Media Content title.(2204): abisht
07-14 12:16:02.693: I/Title is(2204): Title test
07-14 12:16:02.693: I/Link is(2204): http://abishtpub.wordpress.com/2014/06/19/title-test/
07-14 12:16:02.693: I/Comment is.(2204): http://abishtpub.wordpress.com/2014/06/19/title-test/#comments
07-14 12:16:02.693: I/Publish Date is.(2204): Thu, 19 Jun 2014 13:11:17 +0000
07-14 12:16:02.693: I/Media Content url is.(2204): http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
07-14 12:16:02.693: I/Media Content title.(2204): abisht
注意:我没有检查是否解析了所有标签。请自己检查一下。