public void Process(SitemapBuildSitemapXmlArgs args) { Assert.ArgumentNotNull(args, nameof(args)); var urlSet = new Urlset(); var filteredSitemapItems = args.SitemapItems; if (args.IsGroup) { filteredSitemapItems = filteredSitemapItems.Where(sitemapItem => sitemapItem.SiteContext.Name == args.SitemapSiteArgs.SiteContext.Name).ToList(); } foreach (var sitemapItem in filteredSitemapItems) { var path = sitemapItem.Path; // TODO: optimize this loop var alternates = args.SitemapItems.Where(item => item.Path == path); // Cycle through once to get all links for itemAlternates // // e.g. // // <xhtml:link rel="alternate" hreflang="en" href="http://www.site.com/" /> // <xhtml:link rel="alternate" hreflang="fr-ca" href="http://www.site.com/fr" /> // var links = BuildAlternates(alternates, args.SitemapSiteArgs); // output individual loc and lastmod time per https://support.google.com/webmasters/answer/2620865?hl=en // // e.g. // //<url> // <loc>http://www.site.com/</loc> // <lastmod>2018-01-16</lastmod> // <xhtml:link rel="alternate" hreflang="en" href="http://www.site.com/" /> // <xhtml:link rel="alternate" hreflang="fr-ca" href="http://www.site.com/fr" /> //</url> //<url> // <loc>http://www.site.com/fr</loc> // <lastmod>2018-03-26</lastmod > // <xhtml:link rel="alternate" hreflang="en" href="http://www.site.com" /> // <xhtml:link rel="alternate" hreflang="fr-ca" href="http://www.site.com/fr" /> //</url> // var url = BuildUrl(links, sitemapItem, args.SitemapSiteArgs.SiteContext.SiteInfo.EnableItemLanguageFallback); urlSet.Url.Add(url); } args.SitemapSiteArgs.XmlObjects = urlSet; }
public void Process(SitemapBuildSitemapXmlArgs args) { Assert.ArgumentNotNull(args, nameof(args)); var xmlnsIndex = args.SitemapSiteArgs.XmlString.IndexOf("xmlns=", StringComparison.InvariantCultureIgnoreCase); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlString.Insert(xmlnsIndex + "xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"".Length, " xmlns:xhtml=\"http://www.w3.org/1999/xhtml\""); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlString.Replace("xmlns=\"http://www.w3.org/1999/xhtml\"", ""); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlString.Replace("<link", "<xhtml:link"); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlString.Replace("xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"", ""); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlString.Replace("xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"", ""); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlString.Replace("\"utf-16\"", "\"utf-8\""); }
public void Process(SitemapGenerateArgs args) { Assert.ArgumentNotNull(args, nameof(args)); if (args.SitemapSites.Count == 1) { var sitemapBuildSitemapXmlArgs = new SitemapBuildSitemapXmlArgs(args.SitemapSites.FirstOrDefault(), args.SitemapItems); CorePipeline.Run("sitemap.BuildSiteXml", sitemapBuildSitemapXmlArgs); return; } foreach (var sitemapSite in args.SitemapSites) { var sitemapBuildSitemapXmlArgs = new SitemapBuildSitemapXmlArgs(sitemapSite, args.SitemapItems, true); CorePipeline.Run("sitemap.BuildSiteXml", sitemapBuildSitemapXmlArgs); } }
public void Process(SitemapBuildSitemapXmlArgs args) { Assert.ArgumentNotNull(args, nameof(args)); args.SitemapSiteArgs.XmlString = args.SitemapSiteArgs.XmlObjects.SitemapToXml(); }