Rss与Atom的格式区别 收藏
1. Rss的channel属性
title 频道名称 必备 GoUpstate.com News Headlines
link 频道的URL 必备 http://www.cnbruce.com/
description 频道的描述 必备 CNBRUCE'S BLOG(布鲁斯狼)
language 频道文章所用语言 zh-cn或者en-us
copyright 频道内容的版权说明 Copyright 2003-2006 CNBRUCE'S BLOG
managingEditor 责任编辑的email cnbruce@xxxx.com (George Matesky)
webMaster 网站管理员email cnbruce@xxxx.com (Betty Guernsey)
category 指定频道所属的类别 <category>XML AJAX RIA</category>
generator 生成该频道的程序名 MightyInHouse Content System v2.3
pubDate 频道内容发布日期,格式遵循RFC822格式 Sat, 07 Sep 2002 00:00:01 GMT
lastBuildDate 频道内容最后的修改日期 2006-05-15T23:54:02+08:00
docs 指向该RSS文件所用格式说明的URL http://www.cnbruce.com/ /blog/rss2.asp
ttl 有效期,用以指明该频道可被缓存的最长时间分钟为单位 <ttl>60</ttl>
image 指定一个 GIF或JPEG或PNG图片,用以与频道一起显示
rating 这个频道的分级(主要指成人、限制、儿童等
textInput 指定一个text输入框供用户输入,具体信息及功能未定。
skipHours 提示新闻聚合器,那些小时时段它可以跳过。
skipDays 提示新闻聚合器,那些天它可以跳过。
2. Atom的FEED属性
Author 作者:必须包括一个名多个
Category 类型:可能会很多
Contributor投稿者:可能会有很多个
Generator发生器:调用的程序,绝对不能是多个
Icon图标:绝对不能包含多个
Id必须包含一个准备的ID
Link 链接:应该有个属性ref=self的,因为此链接会作为首选地址!,绝对不能有多个属性ref=alternate的;也可以有额外的链接属性,但是是它只是在其他的的基础上做描述
Logo
Rights 版权:绝对不能有多个
Subtitle副标题:绝对不能有多个
Title主标题:必须是一个准确的标题
Updated 最近更新时间:必须是一个准确的;
& extensionElement*),
atomEntry*
每个文章的属性区别
atom的文章格式:
Category 种类:可以包括多个种类 Content 内容:文章的内容,绝对不能多于一个 Contributor投搞者:可以包括多个投搞者
Author 作者:必须包括一个或者多个作者,除非在feed中Author元素,并且他是self,还有在Source中包括作者 Id 必须包括一个准备文章ID Link链接:不包含Content子元素的entry必须至少让一个Link中的ref= alternate;绝对不能有多个rel= alternate的类型组合,也可以包括额外的链接 Published 出版人:绝对不能多个这样的元素 Rights 版权:绝对不能有多个 Source 数据来源:这里可以加子元素!绝对不能有多个 Summary摘要:在包括content,并且有一个src属性,而且他为空的条件下,必须包括一个,但是绝对不能多于一个; Title标题:必须有一个准确的Title Updated最近更新时间:必有一人个准确的Updated & extensionElement*) Rss的文章格式
title 文章或日志标题
link 文章或日志地址
description 文章或日志内容描述
category 文章或日志所属类别
pubDate 文章或日志发表时间
comments 文章或日志评论地址
enclosure
guid
source
此外RSS还有
RSS2.0元素channel的子元素image的子元素列表url 图片的url 必备 title 图片的标题,alt属性 必备 link 网站url(常以频道的url) 必备 width 图片的宽度(象素为单位) 可选 最大144,默认88 height 图片的高度(象素为单位) 可选 最大400,默认3description 用于link的title属性RSS2.0元素channel的子元素textInput的子元素列表title Submit按钮的标签 必备 description 解释text输入区 必备 name Textarea对象的名字 必备 link 处理提交的请求的cgi程序 必备
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shulianyong/archive/2008/06/04/2511083.aspx
package com.android.rss.db;
public class DataField {
public final static String ID = "_id";
public final static String TITLE = "title";
public final static String LINK = "link";
public final static String DESCRIPTION = "desp";
public final static String CREATED_DATE = "create_date";
public final static String MODIFIED_DATE = "modi_date";
}
package com.android.rss.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class RssListDB extends SQLiteOpenHelper{
private final static String DATABASE_NAME = "rss_list_db";
private final static int DATABASE_VERSION = 1;
private final static String TABLE_NAME = "rss_listq22" ;
public RssListDB(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + DataField.ID
+ " INTEGER PRIMARY KEY," + DataField.TITLE + " TEXT,"
+ DataField.LINK + " TEXT," + DataField.DESCRIPTION + " TEXT,"
+ DataField.CREATED_DATE + " INTEGER,"
+ DataField.MODIFIED_DATE + " INTEGER" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
// TODO Auto-generated method stub
String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
db.execSQL(sql);
onCreate(db);
}
public Cursor select()
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
return cursor;
}
public void delete(int id)
{
SQLiteDatabase db = this.getWritableDatabase();
String where = DataField.ID + " = ?";
String[] whereValue =
{ Integer.toString(id) };
db.delete(TABLE_NAME, where, whereValue);
}
public void update(int id, String title,String link,String des)
{
SQLiteDatabase db = this.getWritableDatabase();
String where = DataField.ID + " = ?";
String[] whereValue =
{ Integer.toString(id) };
ContentValues cv = new ContentValues();
cv.put(DataField.LINK, link);
cv.put(DataField.TITLE, title);
cv.put(DataField.DESCRIPTION, des);
cv.put(DataField.MODIFIED_DATE, System.currentTimeMillis());
db.update(TABLE_NAME, cv, where, whereValue);
}
public long insert(String title,String link,String des)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DataField.LINK, link);
cv.put(DataField.TITLE, title);
cv.put(DataField.DESCRIPTION, des);
cv.put(DataField.CREATED_DATE, System.currentTimeMillis());
long row = db.insert(TABLE_NAME, null, cv);
return row;
}
}
package com.android.rss;
import com.android.rss.db.RssListDB;
import com.android.rss.parserFeed.Feed;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class AddressList extends Activity implements OnItemClickListener {
public String[] names ;
public static final String url="http://";;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Feed mFeed = new Feed(url);
getDataFromCursor();
ArrayAdapter<String> data = new ArrayAdapter<Str