• 生成 网站“面包屑” XML


    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 = 0; 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 = 0;
              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>2014-08-19</lastmod>
        <changefreq>weekly</changefreq>
      </url>
    </urlset>
  • 相关阅读:
    服务器上的 Git
    进程有哪几种基本状态,在一个系统中为什么必须区分出这几种状态?
    什么是进程,进程与程序的主要区别是什么?
    什么是与时间有关的错误,是举例说明。
    试解释下列名词:程序的顺序执行,程序的并发执行。
    简述系统调用的执行过程?
    假定某系统提供硬件的访管指令(例如形式:“svc n”),为了实现系统调用,系统设计者应做哪些工作?用户又如如何请求操作系统服务?
    什么是系统调用,对操作系统的服务请求与一般子程序调用有什么区别?
    Windows系统提供什么样的接口,Unix、Linux系统的用户接口是什么?
    用户与操作系统的接口是什么?一个分时系统提供什么接口?一个批处理系统又提供什么接口?
  • 原文地址:https://www.cnblogs.com/Darker-Samuel/p/4086940.html
Copyright © 2020-2023  润新知