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)); } }
/// <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); }
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); }
/// <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); }