Example #1
0
 protected virtual void CheckFileSize(SitemapInfo info, string path)
 {
     if (new FileInfo(path).Length > SitemapInfo.MAX_FILE_SIZE)
     {
         throw new ArgumentOutOfRangeException("info", string.Format("size of a sitemap file greater than {0}.", SitemapInfo.MAX_FILE_SIZE));
     }
 }
Example #2
0
        /// <inheritdoc />
        public virtual void Serialize(SitemapInfo info, string path)
        {
            this.CheckArguments(info, path);

            XmlSerializer           serializer = new XmlSerializer(typeof(SitemapInfo));
            XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();

            namespaces.Add(string.Empty, "http://www.sitemaps.org/schemas/sitemap/0.9");
            using (TextWriter writer = new StreamWriter(path, false, Encoding.UTF8)) {
                serializer.Serialize(writer, info, namespaces);
            }

            this.CheckFileSize(info, path);
        }
Example #3
0
        protected virtual void CheckArguments(SitemapInfo info, string path)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("path is null or empty.", "path");
            }
            if (info.Items.Count > SitemapInfo.MAX_ITEMS_COUNT)
            {
                throw new ArgumentOutOfRangeException("info", string.Format("number of items in a sitemap file greater than {0}.", SitemapInfo.MAX_ITEMS_COUNT));
            }

            FileUtility.CreateFolder(path);
        }
Example #4
0
        /// <inheritdoc />
        public override void Serialize(SitemapInfo info, string path)
        {
            this.CheckArguments(info, path);

            using (XmlWriter writer = XmlWriter.Create(path, new XmlWriterSettings {
                Encoding = Encoding.UTF8,
                Indent = true,
                CloseOutput = true,
            })) {
                writer.WriteStartDocument();
                writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
                writer.WriteAttributeString("xmlns", "mobile", null, "http://www.baidu.com/schemas/sitemap-mobile/1/");

                foreach (SitemapItemInfo item in info.Items)
                {
                    writer.WriteStartElement("url");

                    if (item.Location != null)
                    {
                        writer.WriteElementString("loc", item.Location);
                    }
                    if (item.ItemType.HasValue)
                    {
                        string value = null;
                        switch (item.ItemType.Value)
                        {
                        case SitemapItemType.Mobile:
                            value = "mobile";
                            break;

                        case SitemapItemType.AutoAdaptive:
                            value = "pc,mobile";
                            break;

                        case SitemapItemType.HtmlAdaptive:
                            value = "htmladapt";
                            break;
                        }
                        if (value != null)
                        {
                            writer.WriteStartElement("mobile", "mobile", "http://www.baidu.com/schemas/sitemap-mobile/1/");
                            writer.WriteAttributeString("type", value);
                            writer.WriteEndElement();
                        }
                    }
                    if (item.LastModifyTime.HasValue)
                    {
                        writer.WriteElementString("lastmod", item.LastModifyTime.Value.ToString("yyyy-MM-dd"));
                    }
                    if (item.ChangeFrequency.HasValue)
                    {
                        string value = null;
                        switch (item.ChangeFrequency.Value)
                        {
                        case SitemapItemChangeFrequency.Never:
                            value = "never";
                            break;

                        case SitemapItemChangeFrequency.Yearly:
                            value = "yearly";
                            break;

                        case SitemapItemChangeFrequency.Monthly:
                            value = "monthly";
                            break;

                        case SitemapItemChangeFrequency.Weekly:
                            value = "weekly";
                            break;

                        case SitemapItemChangeFrequency.Daily:
                            value = "daily";
                            break;

                        case SitemapItemChangeFrequency.Hourly:
                            value = "hourly";
                            break;
                        }
                        if (value != null)
                        {
                            writer.WriteElementString("changefreq", value);
                        }
                    }
                    if (item.Priority.HasValue)
                    {
                        writer.WriteElementString("priority", item.Priority.Value.ToString());
                    }

                    writer.WriteEndElement();
                }

                writer.WriteEndElement();
                writer.WriteEndDocument();
            }

            this.CheckFileSize(info, path);
        }