using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Xml; namespace Helper
{
public class SitemapXml
{
private const string Xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
private const string XmlnsXsi = "http://www.w3.org/2001/XMLSchema-instance";
private const string XsiSchemaLocation = "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"; /// <summary>
/// 生成SiteMap地图
/// </summary>
/// <param name="siteMaps">需要生成的 对象列表</param>
/// <param name="saveFileName">设置文件保存名称</param>
/// <param name="changefreq">更新周期</param>
/// <param name="savePath">xml文件保存路径</param>
/// <returns></returns>
public static bool CreateSiteMapXml(List<SiteMap> siteMaps, string savePath = "/", string saveFileName = "sitemap", string changefreq = "weekly")
{
//保存创建好的XML文档
string filename = saveFileName + ".xml";
string path = System.Web.HttpContext.Current.Server.MapPath(savePath) + filename; //先创建XML,返回路径
var xmldoc = new XmlDocument();
//加入XML的声明段落,<?xml version="1.0" encoding="gb2312"?>
XmlDeclaration xmldecl = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);
xmldoc.AppendChild(xmldecl); //加入一个根元素
XmlNode xmlelem = xmldoc.CreateElement("", "urlset", "");
//添加属性
XmlAttribute attr = xmldoc.CreateAttribute("xmlns");
attr.Value = Xmlns;
if (xmlelem.Attributes != null) xmlelem.Attributes.SetNamedItem(attr); attr = xmldoc.CreateAttribute("xmlns:xsi");
attr.Value = XmlnsXsi;
if (xmlelem.Attributes != null) xmlelem.Attributes.SetNamedItem(attr); attr = xmldoc.CreateAttribute("xsi:schemaLocation");
attr.Value = XsiSchemaLocation;
if (xmlelem.Attributes != null) xmlelem.Attributes.SetNamedItem(attr); xmldoc.AppendChild(xmlelem);
string lastmod = DateTime.Now.ToString("yyyy-MM-dd");
for (int i = ; i < siteMaps.Count; i++)
{
XmlNode root = xmldoc.SelectSingleNode("urlset");//查找<urlset>
if (root == null)
{
//加入一个根元素
xmlelem = xmldoc.CreateElement("", "urlset", "");
//添加属性
attr = xmldoc.CreateAttribute("xmlns");
attr.Value = Xmlns;
if (xmlelem.Attributes != null) xmlelem.Attributes.SetNamedItem(attr); attr = xmldoc.CreateAttribute("xmlns:xsi");
attr.Value = XmlnsXsi;
if (xmlelem.Attributes != null) xmlelem.Attributes.SetNamedItem(attr); attr = xmldoc.CreateAttribute("xsi:schemaLocation");
attr.Value = XsiSchemaLocation;
if (xmlelem.Attributes != null) xmlelem.Attributes.SetNamedItem(attr); xmldoc.AppendChild(xmlelem);
i = ;
continue;
}
XmlElement xe1 = xmldoc.CreateElement("url");//创建一个<url>节点 XmlElement xmlelem1 = xmldoc.CreateElement("", "loc", "");
XmlText xmltext = xmldoc.CreateTextNode(siteMaps[i].Loc);
xmlelem1.AppendChild(xmltext);
xe1.AppendChild(xmlelem1); xmlelem1 = xmldoc.CreateElement("", "priority", "");
xmltext = xmldoc.CreateTextNode(siteMaps[i].Priority);
xmlelem1.AppendChild(xmltext);
xe1.AppendChild(xmlelem1); xmlelem1 = xmldoc.CreateElement("", "lastmod", "");
xmltext = xmldoc.CreateTextNode(lastmod);
xmlelem1.AppendChild(xmltext);
xe1.AppendChild(xmlelem1); xmlelem1 = xmldoc.CreateElement("", "changefreq", "");
xmltext = xmldoc.CreateTextNode(changefreq);
xmlelem1.AppendChild(xmltext);
xe1.AppendChild(xmlelem1); root.AppendChild(xe1);//添加到<urlset>节点中
}
try
{
//然后在保存到源位置
xmldoc.AppendChild(xmlelem);
xmldoc.Save(path);
return true;
}
catch (Exception)
{
return false;
}
}
} /// <summary>
///
/// <url>
/// <loc>http://news.chinahbnet.com/2014/8/19/15352.html</loc>
/// <priority>0.5</priority>
/// <lastmod>2014-08-19</lastmod>
/// <changefreq>weekly</changefreq>
/// </url>
///
/// </summary>
public class SiteMap
{
/// <summary>
/// 链接地址
/// 如:http://news.chinahbnet.com
/// </summary>
public string Loc { get; set; }
/// <summary>
/// 网页权重
/// 0.1 - 1
/// </summary>
public string Priority { get; set; }
/// <summary>
/// 生成日期
/// 2014-08-19
/// </summary>
public string Lastmod { get; set; }
/// <summary>
/// 更新周期
/// always 经常
/// hourly 每小时
/// daily 每天
/// weekly 每周
/// monthly 每月
/// yearly 每年
/// never 从不
/// </summary>
public string Changefreq { get; set; }
}
} 生成的结果为: <?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://www.baidu.com</loc>
<priority>1.00</priority>
<lastmod>--</lastmod>
<changefreq>weekly</changefreq>
</url>
</urlset>

生成 网站“面包屑” XML的更多相关文章

  1. 学习使用 CSS3 制作网站面包屑导航效果

    作为最重要的导航展示形式之一,面包屑导航能够让用户更清楚的知道他们所在页面的层次结构,让他们可以方便的导航到上一层页面.在本教程中,您将学习如何使用 CSS3 技术创建自己的面包屑导航效果. 效果演示 ...

  2. MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航

    上篇文章我们完成了 动态生成多级菜单 这个实用组件. 本篇文章我们要开发另一个实用组件:面包屑导航. 面包屑导航(BreadcrumbNavigation)这个概念来自童话故事"汉赛尔和格莱 ...

  3. YII中面包屑制作(当前位置:网站首页 >> 会员登陆)

    面包屑制作(当前位置:网站首页 >> 会员登陆) 作用:就是在布局里要显示的信息,但这个信息在不同的页面里显示的内容不一样,例如:网页的title.网页的当前位置等等 1.布局中每个页面t ...

  4. 夺命雷公狗ThinkPHP项目之----企业网站25之网站前台面包屑导航URL的完善

    如果想取出面包屑导航的url那么就必须在model层里面进行多取一个了: <?php namespace Home\Model; use Think\Model; class CategoryM ...

  5. 夺命雷公狗ThinkPHP项目之----企业网站24之网站前台列表页面包屑导航的显示

    我们做面包屑导航的原理其实也是很简单的,我们的思路是: 首先找到该分类的id ,我们可以通过大 I来进行获取得到: 然后通过 大 D 方法让数据进入model层里面进行循环迭代查询, 当然,测试时候发 ...

  6. 爱上MVC3系列~开发一个站点地图(俗称面包屑)

    回到目录 原来早在webform控件时代就有了SiteMap这个东西,而进行MVC时代后,我们也希望有这样一个东西,它为我们提供了不少方便,如很方便的实现页面导航的内容修改,页面导航的样式换肤等. 我 ...

  7. Bootstrap <基础十八>面包屑导航(Breadcrumbs)

    面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...

  8. 缓存篇(Cache)~第一回 使用static静态成员实现服务器端缓存(导航面包屑)

    返回目录 今天写缓存篇的第一篇文章,在写完目录后,得到了一些朋友的关注,这给我之后的写作带来了无穷的力量,在这里,感谢那几位伙伴,哈哈! 书归正传,今天我带来一个Static静态成员的缓存,其实它也不 ...

  9. WordPress 添加面包屑导航

    所谓面包屑,就是类似这种:首页 > 公司简介 > 发展历史 展示网站树型结构,并让网站访问者随时知道自己所处的位置,方便返回上几级. 将下面的代码添加到主题的 functions.php ...

随机推荐

  1. C语言高效编程的几招(绝对实用,绝对经典)

    编写高效简洁的C语言代码,是许多软件工程师追求的目标.废话不说,走起! 第一招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题 eg.字符串的 ...

  2. skyline TerraBuilder 制作MPT方法与技巧(2)

    制作MPT的方法可以看这里<skyline TerraBuilder 制作MPT方法与技巧(1)>http://www.cnblogs.com/cannel/p/3622447.html ...

  3. 最小较小codeforces 2B The least round way

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记载吧! 求从左上角到右下角所经过的数字之积末端所含0最小的个数 终究的积可以当作A*2^x*5^y, ...

  4. 我经常使用的DOS命令參考

    我经常使用的DOS命令參考         这个C:\>叫做提示符.这个闪动的横线叫做光标. 这样就表示电脑已经准备好,在等待我们给它下命令了.我们如今所须要做的,就是对电脑发出命令.给电脑什么 ...

  5. 我所经历的SAP选型

    这是一个失败的选型项目,而且在可遇见的未来公司也不会再经历SAP选型,甚至不会再启动erp项目,个中原因很难一言道尽,在此简要的说说我们的选型过程以及在选型过程中对各种因素的考虑. 一.重启选型工作七 ...

  6. c# windowsForm打印

    在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .net Framework的打 印功能都以组件的方式提供,为程序员提供了很大的方便,但是 ...

  7. ValueBar

    https://github.com/PhilJay/ValueBar

  8. NDK环境配置

    1.下载安装插件:com.android.ide.eclipse.ndk_23.0.2.1259578.jar      copy到E:\eclipse\adt-bundle-windows-x86- ...

  9. javascript常用方法整理--数组篇

    1. arrayObject.slice(start,end) 从已有的数组中返回选定的元素 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说 ...

  10. day05 Java基础

    1.数组初始化:为数组开辟内存空间,并为每个数组元素赋予值.数组初始化方式: 方式一:动态初始化:初始化时只指定数组长度,由系统为数组分配初始值. 格式:数组类型[] 数组名称=new 数组类型[数组 ...