ASP.NET 输出 RSS 和 Atom 的两个范例, by shawl.qiu

类别: 技术记, c#/.net
标签: shawl.qiu, rss, asp.net, example, ATOM
摘要: ..
正文:

目录:
1. Rss 2.0 输出范例[Rss2.0.aspx]
2. Atom 1.0 输出范例[Atom1.0.aspx]
3. 参考文档

shawl.qiu
2008-01-10 16:17:30
http://groups.google.com/group/shawlqiu?hl=en

下载:
http://groups.google.com/group/shawlqiu/web/aspnet_feed.7z

内容:
1. Rss 2.0 输出范例[Rss2.0.aspx]
<%@ Page Language="C#" AutoEventWireup="True" %>
<!--#include file="..\Config.aspx"-->

<script runat="server">
  
private void Page_Load(object sender, System.EventArgs e)
{
 Response.ContentType = "text/xml";
 Response.Charset = "UTF-8";
 Response.Write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
 Response.Write("<rss version=\"2.0\"><channel>");
 Response.Write(__RssInfo());
 Response.Write(__RssItem());;
 Response.Write("</channel></rss>");
 Response.End();
}

private string __RssInfo()
{
 StringBuilder RssSb = new StringBuilder();
  
 RssSb.Append
 (
  String.Format
  (
   "<title>{1}[RSS 2.0] - {0}</title>"
   , Sys.Db.InfoTbl.Rows[0]["Site_Name"]
   , String.Join(" ", XSysFunc.PageName(Sys.Db.PageTbl, __Id))
  )
 );
 
 RssSb.Append
 (
  String.Format
  (
   "<link>{0}</link>"
   , Sys.Db.InfoTbl.Rows[0]["Site_Url"]
  )
 );
 
 RssSb.Append
 (
  String.Format
  (
   "<description>{0}</description>"
   , "for everyone..."
  )
 );
 
 RssSb.Append
 (
  String.Format
  (
   "<language>{0}</language>"
   , "zh-cn"
  )
 );
 
 RssSb.Append
 (
  String.Format
  (
   "<generator>{0}</generator>"
   , "shawl.qiu CMS"
  )
 );
 
 return RssSb.ToString();
}

private string __RssItem()
{
 StringBuilder RssSb = new StringBuilder();
 
 string Sql = "";
 string QsString = "";
 string SqlQuery = "";
 DataTable ModTbl;
 
 if(RegExp.IsEmpty(Sql))
 {
  SqlQuery = XCat.SqlQuery(QsString);
   
  StringBuilder SqlSb = new StringBuilder();
  SqlSb.Append("exec [_ListProc_Rss] ");
  
  if(Sys.Rank()==1) 
  {
   SqlSb.Append("1");
  }
  else
  {
   SqlSb.Append("0");
  }
  SqlSb.Append(",");
  SqlSb.Append(Sys.Rank());
  SqlSb.Append(",'");
  SqlSb.Append(SqlQuery);;
  SqlSb.Append("%'");
  
  Sql = SqlSb.ToString();
  
  Response.Write(Sql);
  
  //Response.Write("<br/>SqlSb.ToString(): "+SqlSb.ToString());
 }
 
 ModTbl = Xdb.Cmd(__Conn, Sql);
 
 for(int i=ModTbl.Rows.Count-1; i>=0; i--)
 {  
  string sAuthor = ModTbl.Rows[i]["UName"]+"";
  string sText = HtmlToXml(ModTbl.Rows[i]["ADetails"]+"");
  string sLink = 
   String.Format
   (
    "{0}{1}display/?aid={2}"
    , Regex.Replace(Sys.Db.InfoTbl.Rows[0]["Site_Url"]+"", @"/$""")
    , __Path
    , ModTbl.Rows[i]["AId"]+""
   );
  
  RssSb.Append("<item>");
   
   RssSb.Append
   (
    String.Format
    (
     "<title>{0}</title>"
     , ModTbl.Rows[i]["ASubject"]+""
    )
   );
   
   RssSb.Append
   (
    String.Format
    (
     "<author>{0}</author>"
     , sAuthor
    )
   );
   
   RssSb.Append
   (
    String.Format
    (
     "<description><![CDATA[ 摘要:<div>{0}</div><p><a href='{1}'>查看全文</a> ]]></description>"
     , sText
     , sLink
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<pubDate>{0}</pubDate>"
     , ModTbl.Rows[i]["ADate"]+""
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<link>{0}</link>"
     , sLink
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<category>{0}</category>"
     , ModTbl.Rows[i]["CName"]+""
    )
   );
   
//    RssSb.Append
//    ( 
//     String.Format
//     (
//      "<comments>{0}{1}reply/post/?aid={2}</comments>"
//     , Regex.Replace(Sys.Db.InfoTbl.Rows[0]["Site_Url"]+"", @"/$", "")
//     , __Path
//     , ModTbl.Rows[i]["AId"]+""
//     )
//    );
   
   RssSb.Append("</item>");
 }
  
 return RssSb.ToString();
}
    
public static string HtmlToXml(string msg)
{// shawl.qiu code
 if (msg != "" && msg != null)
 {
  msg = msg.Replace("&""&amp;");
  msg = msg.Replace(">""&gt;");
  msg = msg.Replace("<""&lt;");
  msg = msg.Replace("\"""&quot;");
  msg = msg.Replace("'""&apos;");
 }
 return msg;
}// end public static string HtmlToXml(string msg)

</script>

2. Atom 1.0 输出范例[Atom1.0.aspx]
<%@ Page Language="C#" AutoEventWireup="True" %>
<!--#include file="..\Config.aspx"-->

<script runat="server">
string sSiteUrl = "";
  
private void Page_Load(object sender, System.EventArgs e)
{
 sSiteUrl = Regex.Replace(Sys.Db.InfoTbl.Rows[0]["Site_Url"]+"", @"/$""");
 
 Response.ContentType = "text/atom+xml";
 Response.Charset = "UTF-8";
 
 Response.Write
 (
  String.Format
  (
  @"<feed xmlns='http://www.w3.org/2005/Atom'
         xml:lang='{0}'
         xml:base='{1}'>"
   , "zh-cn"
   , sSiteUrl
  )
 );
 
 Response.Write(__RssInfo());
 Response.Write(__RssItem());
 
 Response.Write("</feed>");
 Response.End();
}

private string __RssInfo()
{
 StringBuilder RssSb = new StringBuilder();
 
 // <id>http://www.example.org/myfeed</id>
  
 RssSb.Append
 (
  String.Format
  (
   "<id>{0}</id>"
   , sSiteUrl+"/feed/"
  )
 );
  
 RssSb.Append
 (
  String.Format
  (
   "<title>{1}[Atom 1.0] - {0}</title>"
   , Sys.Db.InfoTbl.Rows[0]["Site_Name"]
   , String.Join(" ", XSysFunc.PageName(Sys.Db.PageTbl, __Id))
  )
 );
  
 RssSb.Append
 (
  String.Format
  (
   " <updated>{0}Z</updated>"
   , (DateTime.Now+"").Replace(" ""T")
  )
 );
  
 RssSb.Append
 (
  String.Format
  (
   " <link href='{0}' />"
   , __Path
  )
 );
  
 RssSb.Append
 (
  String.Format
  (
   "<link rel='self' href='{0}' />"
   , __Path+"feed/"
  )
 );
 
 RssSb.Append
 (
  String.Format
  (
   "<subtitle>{0}</subtitle>"
   , "for everyone..."
  )
 );
 
 RssSb.Append
 (
  String.Format
  (
   "<generator>{0}</generator>"
   , "shawl.qiu CMS"
  )
 );
 
 return RssSb.ToString();
}

private string __RssItem()
{
 StringBuilder RssSb = new StringBuilder();
 
 string Sql = "";
 string QsString = "";
 string SqlQuery = "";
 DataTable ModTbl;
 
 if(RegExp.IsEmpty(Sql))
 {
  SqlQuery = XCat.SqlQuery(QsString);
   
  StringBuilder SqlSb = new StringBuilder();
  SqlSb.Append("exec [_ListProc_Rss] ");
  
  if(Sys.Rank()==1) 
  {
   SqlSb.Append("1");
  }
  else
  {
   SqlSb.Append("0");
  }
  SqlSb.Append(",");
  SqlSb.Append(Sys.Rank());
  SqlSb.Append(",'");
  SqlSb.Append(SqlQuery);;
  SqlSb.Append("%'");
  
  Sql = SqlSb.ToString();
  
  Response.Write(Sql);
  
  //Response.Write("<br/>SqlSb.ToString(): "+SqlSb.ToString());
 }
 
 ModTbl = Xdb.Cmd(__Conn, Sql);
 
 for(int i=ModTbl.Rows.Count-1; i>=0; i--)
 {  
  string sAuthor = ModTbl.Rows[i]["UName"]+"";
  string sText = HtmlToXml(ModTbl.Rows[i]["ADetails"]+"");
  string sLink = 
   String.Format
   (
    "{0}{1}display/?aid={2}"
    , Regex.Replace(Sys.Db.InfoTbl.Rows[0]["Site_Url"]+"", @"/$""")
    , __Path
    , ModTbl.Rows[i]["AId"]+""
   );
  
  RssSb.Append("<entry>");
   
   RssSb.Append
   (
    String.Format
    (
     "<id>{0}</id>"
     , ModTbl.Rows[i]["AId"]
    )
   );
   
   RssSb.Append
   (
    String.Format
    (
     "<title>{0}</title>"
     , ModTbl.Rows[i]["ASubject"]+""
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<link href='{0}' />"
     , sLink
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<updated>{0}Z</updated>"
     , (ModTbl.Rows[i]["ALastUpdate"]+"").Replace(" ""T")
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<pubDate>{0}</pubDate>"
     , (ModTbl.Rows[i]["ADate"]+"").Replace(" ""T")
    )
   );
   
   RssSb.Append
   (
    String.Format
    (
     "<author><name>{0}</name></author>"
     , sAuthor
    )
   );
   
   RssSb.Append
   (
    String.Format
    (
     "<summary type='xhtml'><![CDATA[ 摘要:<div>{0}</div><p><a href='{1}'>查看全文</a> ]]></summary>"
     , sText
     , sLink
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     "<category>{0}</category>"
     , ModTbl.Rows[i]["CName"]+""
    )
   );
   
   RssSb.Append
   ( 
    String.Format
    (
     @"
       <content type='html' xml:lang='en'>
        {0}
       </content>"
     , HtmlToXml(ModTbl.Rows[i]["AText"]+"")
    )
   );
     //, HtmlToXml(ModTbl.Rows[i]["AText"]+"")
     //, HtmlToXml(System.Text.Encoding.Unicode.GetString((byte[])ModTbl.Rows[i]["AText"]))
   
   RssSb.Append("</entry>");
 }
  
 return RssSb.ToString();
}
    
public static string HtmlToXml(string msg)
{// shawl.qiu code
 if (msg != "" && msg != null)
 {
  msg = msg.Replace("&""&amp;");
  msg = msg.Replace(">""&gt;");
  msg = msg.Replace("<""&lt;");
  msg = msg.Replace("\"""&quot;");
  msg = msg.Replace("'""&apos;");
 }
 return msg;
}// end public static string HtmlToXml(string msg)

</script>


3. 参考文档
rfc 4287 - The Atom Syndication Format
RSS 2.0 specification.
文章相关信息:
主题: ASP.NET 输出 RSS 和 Atom 的两个范例, by shawl.qiu
发表者: shawl.qiu
电子邮件: shawl.qiu@gmail.com
QQ: 908202921
MSN: btbtd@msn.com
Homepage: http://www.btbtd.org/
Blog: http://blog.csdn.net/btbtd/
发表日期: 2008-1-10 16:21:56
更新日期: 2008-1-10 16:26:59
来源引用: shawl.qiu CSharp DotNet 个人资料管理系统
引用本页: http://gi.2288.org/mod/article/display/Default.aspx?aid=18177
关闭
Google
搜索WWW
搜索www.btbtd.org
搜索blog.csdn.net
Powered by shawl.qiu © 2008-2010 the shawl.qiu Javascript Kits
Copyright © 2008-2010 by shawl.qiu