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