//------------------------------------------------------------------------------
// The contents of this file are subject to the nopCommerce Public License Version 1.0 ("License"); you may not use this file except in compliance with the License.
// You may obtain a copy of the License at http://www.nopCommerce.com/License.aspx.
//
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
// See the License for the specific language governing rights and limitations under the License.
//
// The Original Code is nopCommerce.
// The Initial Developer of the Original Code is NopSolutions.
// All Rights Reserved.
//
// Contributor(s): Andrew Thomas.
//------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration.Provider;
using System.Globalization;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Xml;
using NopSolutions.NopCommerce.BusinessLogic.Categories;
using NopSolutions.NopCommerce.BusinessLogic.Configuration;
using NopSolutions.NopCommerce.BusinessLogic.Content.Blog;
using NopSolutions.NopCommerce.BusinessLogic.Content.NewsManagement;
using NopSolutions.NopCommerce.BusinessLogic.Manufacturers;
using NopSolutions.NopCommerce.BusinessLogic.Products;
using NopSolutions.NopCommerce.BusinessLogic.Utils;
using NopSolutions.NopCommerce.Common.Xml;
namespace NopSolutions.NopCommerce.BusinessLogic.SEO.Sitemaps{
/// <summary>
/// Represents a base sitemap generator
/// </summary>
public abstract partial class BaseSitemapGenerator
{
#region Fields
private const string DateFormat = @"yyyy-MM-dd";
private XmlTextWriter _writer = null;
#endregion
#region Utilities
/// <summary>
/// Method that is overridden, that handles creation of child urls.
/// Use the method WriteUrlLocation() within this method.
/// </summary>
protected abstract void GenerateUrlNodes();
/// <summary>
/// Writes the url location to the writer.
/// </summary>
/// <param name="url">Url of indexed location (don't put root url information in).</param>
/// <param name="updateFrequency">Update frequency - always, hourly, daily, weekly, yearly, never.</param>
/// <param name="lastUpdated">Date last updated.</param>
protected void WriteUrlLocation(string url, UpdateFrequency updateFrequency, DateTime lastUpdated)
{
_writer.WriteStartElement("url");
string loc = XmlHelper.XmlEncode(url);
_writer.WriteElementString("loc", loc);
_writer.WriteElementString("changefreq", updateFrequency.ToString());
_writer.WriteElementString("lastmod", lastUpdated.ToString(DateFormat));
_writer.WriteEndElement();
}
#endregion
#region Methods
/// <summary>
/// This will build an xml sitemap for better index with search engines.
/// See http://en.wikipedia.org/wiki/Sitemaps for more information.
/// </summary>
/// <returns>Sitemap.xml as string</returns>
public string Generate()
{
using (var stream = new MemoryStream())
{
Generate(stream);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
/// <summary>
/// This will build an xml sitemap for better index with search engines.
/// See http://en.wikipedia.org/wiki/Sitemaps for more information.
/// </summary>
/// <param name="stream">Stream of sitemap.</param>
public void Generate(Stream stream)
{
_writer = new XmlTextWriter(stream, Encoding.UTF8);
_writer.Formatting = Formatting.Indented;
_writer.WriteStartDocument();
_writer.WriteStartElement("urlset");
_writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
_writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
_writer.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
GenerateUrlNodes();
_writer.WriteEndElement();
_writer.Close();
}
#endregion
}
}
|