我正在使用
Android中的SimpleXML解析XML Feed:
http://backend.deviantart.com/rss.xml?type=deviation&q=by%3Aspyed+sort%3Atime+meta%3Aall
示例:
<?xml version="1.0" encoding="UTF-8"?> <RSS xmlns:atom="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRSSModule" xmlns:media="http://search.yahoo.com/mRSS/" version="2.0"> <channel> <title>DeviantArt: spyed's</title> <link>http://www.deviantart.com/?order=5&q=by%3Aspyed</link> <description>DeviantArt RSS for sort:time by:spyed</description> <language>en-us</language> <copyright>Copyright 2015,DeviantArt.com</copyright> <pubDate>Thu,20 Aug 2015 07:45:31 PDT</pubDate> <generator>DeviantArt.com</generator> <docs>http://blogs.law.harvard.edu/tech/RSS</docs> <atom:icon>http://st.deviantart.net/minish/touch-icons/android-192.png</atom:icon> <atom:link type="application/RSS+xml" rel="self" href="http://backend.deviantart.com/RSS.xml?q=sort%3Atime+by%3Aspyed&type=deviation" /> <atom:link rel="next" href="http://backend.deviantart.com/RSS.xml?q=sort%3Atime+by%3Aspyed&type=deviation&offset=60" /> <item> <title>Happy 15th Birthday!</title> <link>http://spyed.deviantart.com/journal/Happy-15th-Birthday-552416478</link> <guid isPermaLink="true">http://spyed.deviantart.com/journal/Happy-15th-Birthday-552416478</guid> <pubDate>Sun,09 Aug 2015 01:41:54 PDT</pubDate> <media:title type="plain">Happy 15th Birthday!</media:title> <media:keywords /> <media:rating>nonadult</media:rating> <media:category label="Personal">journals/personal</media:category> <media:credit role="author" scheme="urn:ebu">spyed</media:credit> <media:credit role="author" scheme="urn:ebu">http://a.deviantart.net/avatars/s/p/spyed.gif</media:credit> <media:copyright url="http://spyed.deviantart.com">Copyright 2015 spyed</media:copyright> <media:description type="html" /> <media:content url="http://spyed.deviantart.com/journal/Happy-15th-Birthday-552416478" medium="document" /> <media:text type="html">In April I wrote a post reflecting on my 15 years at DeviantArt,since the project began in April of 2000 and was launched to the public on August 7th. I went back and re-read what I wrote,and wow,speaking of audacIoUs I'm pretty hardcore in this post. I write from my heart sometimes and then I hit post and that's that. So for our official 15th Birthday I wanted to re-share a link to that post:<br /><br />And then today,I wrote this reflection for you as a toast &amp; thanks for all the llamas:<br /><br />Happy 15th Birthday DeviantArt! We are evolving,and soon we will be able to share exactly how you can be a part of our transformation,ensuring that the De</media:text> <description /> </item> <item> <title>The Floor is Open</title> <link>http://spyed.deviantart.com/journal/The-Floor-is-Open-548845475</link> <guid isPermaLink="true">http://spyed.deviantart.com/journal/The-Floor-is-Open-548845475</guid> <pubDate>Sat,25 Jul 2015 11:38:46 PDT</pubDate> <media:title type="plain">The Floor is Open</media:title> <media:keywords /> <media:rating>nonadult</media:rating> <media:category label="Personal">journals/personal</media:category> <media:credit role="author" scheme="urn:ebu">spyed</media:credit> <media:credit role="author" scheme="urn:ebu">http://a.deviantart.net/avatars/s/p/spyed.gif</media:credit> <media:copyright url="http://spyed.deviantart.com">Copyright 2015 spyed</media:copyright> <media:description type="html" /> <media:content url="http://spyed.deviantart.com/journal/The-Floor-is-Open-548845475" medium="document" /> <media:text type="html">Happy Saturday! I'm hanging out at home,so I thought I'd have an open conversation. Post anything,I'll reply. It's about 11:30am,I'll be in front of this thing for two hours before I go to my god daughters 7th birthday party! Yay!<br /><br />If you're wondering what we're up to,check out the DeviantArt Timeline ( http://www.deviantart.com/timeline/ ) -- It might compel you to ask some questions. Or,if there's anything you've been wondering about,ask!<br /><br />Here's some food for thought to get you started about the overall state of DeviantArt:<br /><br />Our team focuses on two things that matter most to us,the first is our mission to Entertain,Inspire &amp; Em</media:text> <description /> </item> ... etc ....
但我收到以下错误:
08-13 15:55:38.529: W/System.err(1437): org.simpleframework.xml.core.PersistenceException: Element 'title' is already used with @org.simpleframework.xml.Element(data=false,name=title,required=false,type=void) on field 'title' public java.lang.String com.example.Feedreader.SimpleRSS$Channel$RSSItem.title at line 1
我注意到,在两个不同的级别中有一个标题标签,但我不知道如何在代码中进行区分.
这是我有的:
@Root(name = "RSS",strict = false) public class SimpleRSS implements FeedRoot { @Root(name = "channel") public static class Channel { @Element(name = "title",required = false) public String title = ""; @Attribute(name = "href",required = false) @ElementList(entry = "link",inline = true,required = false) private List<String> links; @Element(name = "description",required = false) @Namespace(prefix = "") public String description = ""; @Element(name = "pubDate",required = false) public String pubDate = ""; @Element(name = "event_link",required = false) public String event_link = ""; @Root(name = "item") public static class RSSItem implements SimpleFeedItem { public String parent = ""; public String FeedUrl = null; public Date date = null; @Element(name = "title",required = false) public String title = ""; @Element(name = "link",required = false) public String link = ""; @Element(name = "event_link",required = false) public String event_link = ""; @Element(name = "description",required = false) public String description = ""; @Element(name = "pubDate",required = false) public String pubDate = ""; @Path("enclosure") @Attribute(name = "url",required = false) public String enclosureUrl = ""; @Path("enclosure") @Attribute(name = "type",required = false) public String enclosureType = ""; @Override public String getTitle() { return title; } @Override public String getDescription() { return description; } @Override public String getLink() { return link; } @Override public String getEventLink() { return event_link; } @Override public String getAdditional() { return parent; } @Override public String getPubDate() { return pubDate; } @Override public String getFeedUrl() { return FeedUrl; } @Override public void setFeedUrl(String url) { FeedUrl = url; } @Override public void setDate(Date date) { this.date = date; } @Override public Date getDate() { return date; } @Override public String getPictureUrl() { if (DataUtils.isEmpty(enclosureType)) { return null; } else if (SimpleFeedItem.SupportedFeedImageTypes .contains(enclosureType.toLowerCase(Locale.ENGLISH))) { return enclosureUrl; } else { return null; } } } @ElementList(inline = true,required = false) public List<RSSItem> RSSItems = J.newArrayList(); } @Element(name = "channel") public Channel channel; @Override public List<SimpleFeedItem> getItems() { List<SimpleFeedItem> items = J.newArrayList(); if (channel != null && channel.RSSItems != null) { for (RSSItem item : channel.RSSItems) { String title = channel.title; if (title == null) { title = ""; } item.parent = title.intern(); items.add(item); } } return items; } @Override public String getTitle() { if (channel == null) { return ""; } else { return channel.title; } } }
我试过评论过
@Element(name = "title",required = false) public String title = "";
在Channel类中,我得到相同的错误.另外如果我只是重命名它.
如果我在RSSItem类中做同样的事情,它会工作,但是我没有获得项目的标题.
谢谢!