Android中的Atom学习

Yuezhilv 2011-02-14

1.Atom的简单介绍:

由于RSS不是一个真正的开放的标准,而且存在这混乱的版本号,所以相关领域的专家就坐下来一起研发下一代的开放标准的格式。正是这样的一个目的造就了Atom最大的优点——开放标准。Atom是由庞大的委员会磋商而成的一个社区标准。

atom具体的标准请参阅官方网站

http://www.atomenabled.org/developers/syndication/atom-format-spec.php

 

2.Atom的规范格式:

|-Atom的FEED常用属性

       |-Author         作者:必须包括一个名多个

       |-Category      类型:可能会很多

       |-Contributor   投稿者:可能会有很多个

       |-Generator     发生器:调用的程序,绝对不能是多个

       |-Icon             图标:绝对不能包含多个

       |-Id                必须包含一个准备的ID

       |-Link             链接:应该有个属性ref=self的,因为此链接会作为首选地址!绝对不能有多个属性ref=alternate的;也可以有额外的链接属性,但是它只是在其他的的基础上做描述

       |-Rights          版权:绝对不能有多个

       |-Subtitle        副标题:绝对不能有多个

       |-Title             主标题:必须是一个准确的标题

       |-Updated              最近更新时间:必须是一个准确的;

 

3.代码说明

3.1配置定位环境

因为要用到网络的资源,所以必须在AndroidManifest.xml里加入权限

<uses-permission android:name="android.permission.INTERNET" />

因为考虑到可能要读取不同的类型的xml文件,也就是兼容rss和atom的各个版本,所以为了统一,采用了外部的jar包,其中有rome.jar和jdom.jar,rome.jar帮我们封装了处理不同类型的xml的分歧。统一了代码。

 

3.2.编写业务逻辑代码

(1) 编写ChannelVO类

以下是Atom封装的类,封装了获得Atom的信息,将atom对象化

public class ChannelVO {
	private String title;//频道的标题
	private String description;//频道的描述
	private String link;//频道的连接
	private String uri;//频道的统一资源标示符
	@SuppressWarnings("unchecked")
	private List items;//所有的Item
	private String language;//标示的是语言
	private String copyright;//版权信息
	private Date pubDate;//发布日趋
	private String feedType;//类型
	private String encoding;//编码类型

……
	//下边的是上边的属性的一系列get(),set()方法
	……
}

 (2) 编写的ChannelItemVO类封转了Item的信息,将Item对象化。

public class ChannelItemVO {
	private String title;// Rss文件中Item的标题
	private String link;// Rss文件中Item对应的连接
	private String description;// Item的描述
	private Date pubDate;// Item发布的时间
	private String author;// Item作者
private String category;// Item所属的频道范畴

……
	//下边的是上边的属性的一系列get(),set()方法
	……
}

 (3)编写测试类FeedWriter通过rome的jar包可以很容易的实现添加feed,通过SyndFeed的实例可以创建feed种子,然后通过各种的set()方法,把要添加的内容一个个的添加到feed上,最后流的形式建立新的xml文件。

String feedType = args[0];
String fileName = args[1];
DateFormat dateParser = new SimpleDateFormat(DATE_FORMAT);
SyndFeed feed = new SyndFeedImpl(); // feed流
feed.setFeedType(feedType); // 设置rss版本
feed.setTitle("Sample Feed (created with Rome)"); // <title>设置标题
feed.setLink("http://www.csdn.net"); // <link>
feed.setDescription("This feed has been created using Rome (Java syndication utilities");
List<SyndEntryImpl> entries = new ArrayList<SyndEntryImpl>();
SyndEntry entry;
SyndContent description;
entry = new SyndEntryImpl(); // 子节点
entry.setTitle("Rome v1.0");
entry.setLink("http://www.csdn.net");
entry.setPublishedDate(dateParser.parse("2004-06-08"));
description = new SyndContentImpl();
description.setType("text/plain");
description.setValue("Initial release of Rome");
entry.setDescription(description);
entries.add((SyndEntryImpl) entry);
entry = new SyndEntryImpl();
entry.setTitle("Rome v2.0");
entry.setLink("http://ww.csdn.net");
entry.setPublishedDate(dateParser.parse("2004-06-16"));
description = new SyndContentImpl(); // 描述
description.setType("text/xml");
description.setValue("Bug fixes, < xml>XML< /xml> minor API changes and some new features");
entry.setDescription(description);
entries.add((SyndEntryImpl) entry);
entry = new SyndEntryImpl();
entry.setTitle("Rome v3.0");
entry.setLink("http://www.csdn.net");
entry.setPublishedDate(dateParser.parse("2004-07-27"));
description = new SyndContentImpl();
description.setType("text/html");
description.setValue("< p>More Bug fixes, mor API changes, some new features and some Unit testing< /p>"
				+ "< p>For details check the < a href=\"http://www.csdn.net\">Changes Log< /a>< /p>");
entry.setDescription(description);
entries.add((SyndEntryImpl) entry);
feed.setEntries(entries); // 设置子节点
Writer writer = new FileWriter(fileName);
SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, writer); // 写到文件中去
writer.close();

 (4)类ReaderRSS是测试是否可以兼容的浏览不同的xml文件。通过本地的三个不同的文件:

String url = "http://10.167.12.184:8080/examples/images/RSS1.0.xml";
String url = "http://10.167.12.184:8080/examples/images/RSS2.0.xml";
String url = "http://10.167.12.184:8080/examples/images/ATOM.xml";

 测试出rome已经帮我们封装好了我们可以不用关心xml的类型

(5)通过sax解析也能够直接的读取atom的feed方法和rss一样。

相关推荐