当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 基于C# 网站地图制作

ASP.NET
赫赫大名的A*寻路算法(vb.net版本)
asp.net(c#)下Jmai去说明 使用与下载
[原创]完美解决Could not load file or assembly ''AjaxPro.2'' or one of its dependencies. 拒绝访问。
asp.net下gridview 批量删除的实现方法
用CSS实现图片倾斜 只支持IE
.net get set用法小结
vs 不显示行号的操作方法
ASP.NET页面进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)
ASP.Net不执行问题一解
asp.net 无限分类
让VS2008对JQuery语法的智能感知更完美一点
扩展方法ToJSON() and ParseJSON()
asp.net下PageMethods使用技巧
Linq to SQL Delete时遇到问题的解决方法
实现ASP.NET多文件上传程序代码
ASP.NET AJAX 1.0 RC开发10分钟图解
asp.net get set用法
ASP.NET下使用WScript.Shell执行命令
asp.net2.0实现邮件发送(测试成功)
Asp.net 无限级分类实例代码

ASP.NET 中的 基于C# 网站地图制作


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 254 ::
收藏到网摘: n/a

为啥要做网站地图呢?网站地图在提高网站排名的活动中起着举足轻重的作用,一般作网站的银都知道。^_^除了网站地图本身的重要性以外,还有以下几个原因 1、 我们的网站是用C#开发的,我们采用数据库存储所有文章信息。所以我们的文章都是动态地从数据库中提取出来的。这点很不利于蜘蛛的顺藤摸瓜。
2、 这点嘛,嘿嘿,就有些勉强了。做个网站地图,可以让用户对敝网站的内容一目了然,能起到很好的导航作用。
鉴于上述原因,于是乎,俺就决定为俺地“赤兔英语网”做一个网站地图。由于Google等搜索引擎所需的网站地图必须是XML文件,所以俺决定做网页形式和XML形式两种网站地图。我们的网站是用C#开发的,当然是使用C#语言来编写俺地网站地图了,赫赫。
首先,我们来看看,我们的网站地图该怎么生成,怎么展现。简单思考之后,我决定这样做。网站首页的菜单中添加“网站地图”选项,其链接着网页形式的网站地图,页面名字为sitemap.html;首页的底部也添加链接“网站地图”,其链接着XML格式的网站地图,页面名字为sitemap.xml。这两个页面生成程序在后台添加。设置一个按钮,管理员在一段时间内点击该按钮,直接生成这两个文件,放在网站的根目录下,供客户端随时调用。
下面,我们来看看生成网站地图的代码的具体实现。为了文章可读性,我们从顶向下来对code实现过程做以介绍。
一、网站地图的顶层设计
顶层的网站地图生成按钮的code为:
protected void BtnGenerateSitemap_Click(object sender, EventArgs e)
{
createHtmlSitemap();
createXMLSitemap();
WebUtility.ResponseScript("网站地图生成完毕!",0);
}
上面code一目了然,createHtmlSitemap()用来生成html网站地图,createXMLSitemap()用来生成XML网站地图。
二、Html网站地图的生成
我们先介绍Html网站地图的生成。createHtmlSitemap()的code如下:
public void createHtmlSitemap()
{
FileInfo HtmlFile = null;
StreamWriter WriteHtmlFile = null;
string FilePath = Server.MapPath("sitemap.html");//获取html文件路径及名称
HtmlFile = new FileInfo(FilePath);//创建html文件
WriteHtmlFile = HtmlFile.CreateText();
WriteHtmlFile.WriteLine("<html>");
WriteHtmlFile.WriteLine("<head>");
WriteHtmlFile.WriteLine("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");
WriteHtmlFile.WriteLine("<title>赤兔英语网 网站地图</title>");
WriteHtmlFile.WriteLine("</head>");
WriteHtmlFile.WriteLine("<body>");
getHtmlSitemapData(WriteHtmlFile);
WriteHtmlFile.WriteLine("</body>");
WriteHtmlFile.WriteLine("</html>");
WriteHtmlFile.Close();
}
上述code创建了html文件sitemap.html,并使用对象StreamWriter书写了sitemap.html。函数getHtmlSitemapData(WriteHtmlFile)完成了sitemap.html正文部分的组织。
需要注意的是,如果网站地图中有中文,必须将charset设置为UTF-8。否则中文不能正常显示。
public void getHtmlSitemapData(StreamWriter writerFile)
{
string classTableName = "ArticleClass";
string articleItemTableName = "ArticleItem";
string connectionString = ConfigurationManager.AppSettings["SQLConnString"].ToString();
SqlConnection conn = new SqlConnection(connectionString);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
//查询大类信息
SqlDataAdapter classDataAdpt = new SqlDataAdapter("SELECT Id, Classname FROM " + classTableName, connectionString);
DataSet classDataSet = new DataSet();
classDataAdpt.Fill(classDataSet, classTableName);
writerFile.WriteLine("<table border='1' width='1000px'cellspacing='0' cellpadding='0'>");
//按照大类信息来查取各个大类下的文章信息
for (int i = 0; i < classDataSet.Tables[0].Rows.Count; i++)
{
string tempsql = "SELECT Id, ArticleTitle, Parentid FROM " + articleItemTableName + " where Parentid = " + classDataSet.Tables[0].Rows[i][0].ToString();
SqlCommand cmd = new SqlCommand(tempsql, conn);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (rdr.HasRows)
{
int classId = 0;
int rowNum = 0;//记录处理了篇文章信息
int memberInLine = 5;//每行显示多少篇文章的链接信息
while (rdr.Read())
{
//处理大类信息,大类也需要以超链接的方式写入html文件
if (classId != int.Parse(rdr[2].ToString()))
{
rowNum = 0;
classId = int.Parse(rdr[2].ToString());
writerFile.WriteLine("<tr>");
writerFile.WriteLine("<td colspan='5'>");
writerFile.WriteLine("<a style='font-size:15px;font-weight:bold;' target='_blank' href='http://www.chituwang.com/Article/index.aspx?parentid=" + classDataSet.Tables[0].Rows[i][0].ToString() + "'>" + classDataSet.Tables[0].Rows[i][1].ToString() + "</a>");
writerFile.WriteLine("</td>");
writerFile.WriteLine("</tr>");
}
//处理文章信息
rowNum++;
if (1 == (rowNum % memberInLine))//a new line
{
writerFile.WriteLine("<tr>");
}
writerFile.WriteLine("<td style='width:200px'>");
writerFile.WriteLine("<a target='_blank' href='http://www.chituwang.com/Article/index.aspx?articleid=" + rdr[0].ToString() + "'>" + rdr[1].ToString() + "</a>");
writerFile.WriteLine("</td>");
if (0 == (rowNum % memberInLine))//a new line
{
writerFile.WriteLine("</tr>");
}
}
}
rdr.Close();
}
writerFile.WriteLine("</table>");
}
三、XML网站地图的生成
XML网站地图的生成与Html不同点在于,Google等搜索引擎对这种网站地图的格式有严格的要求,必须遵守,否则不会被他们承认。具体xml文件格式可参考http://www.chituwang.com/Article/WZJS/detail.aspx?articleid=18092
createXMLSitemap()函数的实现如下:
public void createXMLSitemap()
{
FileInfo XMLFile = null;
StreamWriter WriteXMLFile = null;
string FilePath = Server.MapPath("sitemap.xml");
XMLFile = new FileInfo(FilePath);
WriteXMLFile = XMLFile.CreateText();
//下面两句话必须写,而且不能做任何修改
WriteXMLFile.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
WriteXMLFile.WriteLine("<urlset xmlns=\"http://www.google.com/schemas/sitemap/0.84\">");
getXMLSitemapData(WriteXMLFile);
WriteXMLFile.WriteLine("</urlset>");//别忘了这句话
WriteXMLFile.Close();
}
createXMLSitemap()的实现如下:
public void getXMLSitemapData(StreamWriter writerFile)
{
string classTableName = "ArticleClass";
string articleItemTableName = "ArticleItem";
string connectionString = ConfigurationManager.AppSettings["SQLConnString"].ToString();
SqlConnection conn = new SqlConnection(connectionString);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
//查询大类信息
SqlDataAdapter classDataAdpt = new SqlDataAdapter("SELECT Id, Classname FROM " + classTableName, connectionString);
DataSet classDataSet = new DataSet();
classDataAdpt.Fill(classDataSet, classTableName);
for (int i = 0; i < classDataSet.Tables[0].Rows.Count; i++)
{
string tempsql = "SELECT Id, ArticleTitle, Parentid FROM " + articleItemTableName + " where Parentid = " + classDataSet.Tables[0].Rows[i][0].ToString();
SqlCommand cmd = new SqlCommand(tempsql, conn);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (rdr.HasRows)
{
int subClassId = 0;
while (rdr.Read())
{
//处理大类信息,
if (subClassId != int.Parse(rdr[0].ToString()))
{
subClassId = int.Parse(rdr[0].ToString());
writerFile.WriteLine("<url>");
writerFile.WriteLine("<loc>" + "http://www.chituwang.com/Article/index.aspx?parentid=" + rdr[2].ToString() + "</loc>");
writerFile.WriteLine("<lastmod>" + DateTime.Now.ToShortDateString() + "</lastmod>");
writerFile.WriteLine("<changefreq>daily</changefreq>");
writerFile.WriteLine("<priority>0.5</priority>");
writerFile.WriteLine("</url>");
}
//处理文章信息
writerFile.WriteLine("<url>");
writerFile.WriteLine("<loc>" + "http://www.chituwang.com/Article/index.aspx?articleid=" + rdr[0].ToString() + "</loc>");
writerFile.WriteLine("<lastmod>" + DateTime.Now.ToShortDateString() + "</lastmod>");
writerFile.WriteLine("<changefreq>monthly</changefreq>");
writerFile.WriteLine("<priority>0.4</priority>");
writerFile.WriteLine("</url>");
}
}
rdr.Close();
}
}
通过上面两个小节的介绍,网页和XML两种形式的网站地图就生成了。
四、网站地图的提交
向Google提交网站地图:
  https://www.google.com/webmasters/tools/login?hl=zh_CN
  1、进入这个网址,用你的Google帐户登录,然后添加你的网址;
  2、接下来按照Google的要求验证你网站,你可以选择html文件验证。
  3、这时候,按照Google的要求,制作一个Google要求的文件名的html文件
  4、用FTP讲这个html文件和你的xml格式的网站地图文件一起传到你网站的根目录
  5、确认验证,回到控制台,添加你的地图文件。很快,Google就会根据网站地图文件来更新你的网站
向yahoo提交网站地图:
  英文yahoo提交网址:
  http://search.yahoo.com/info/submit.html
  首先用FTP讲你的网站地图传到网站的根目录。打开网址后,选择Submit Your Site for Free: 用yahoo帐户登录,然后输入你的网站地图的URL就可以了。
  中文Yahoo的提交网址:
  http://sitemap.cn.yahoo.com/mysites
  这个操作和Google的差不多,登录、验证网站、提交网址地图URL。
向MSN提交网站地图Sitemap: 用URL直接提交:http://api.moreover.com/ping?u=http://your.domainname/sitemap.xml
这是向MSN直接提交网站地图的后门URL
向ASK提交网站地图Sitemap: 直接提交。http://submissions.ask.com/ping?sitemap=http://your.domainname/sitemap.xml
向网店联盟提交地址:http://www.dianmeng.com/
向百度Baidu提交网站地图Sitemap: 没办法,现在百度不支持Sitemap。但可通过http://www.baidu.com/search/url_submit.html来提交你的网址。