我正在建立一个网站。现在我想创建它的 xml 站点地图,如谷歌站点地图。但我想使用 C# 以编程方式创建它。
谁能告诉我如何使用我网站的基本 URL 访问 Web 服务器上的根目录,将所有页面列表放入字符串列表中?
我正在建立一个网站。现在我想创建它的 xml 站点地图,如谷歌站点地图。但我想使用 C# 以编程方式创建它。
谁能告诉我如何使用我网站的基本 URL 访问 Web 服务器上的根目录,将所有页面列表放入字符串列表中?
轻轻松松
private void GenerateXML()
{
try
{
string fileName = "sitemap.xml";
string DOMAIN = "http://www.sohel-elite.com";
string LAST_MODIFY= String.Format("{0:yyyy-MM-dd}", DateTime.Now);
string CHANGE_FREQ = "monthly";
string TOP_PRIORITY = "0.5";
string MEDIUM_PRIORITY = "0.8";
XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XNamespace xsiNs = "http://www.w3.org/2001/XMLSchema-instance";
//XDocument Start
XDocument xDoc = new XDocument(
new XDeclaration("1.0", "UTF-8", "no"),
new XElement(ns + "urlset",
new XAttribute(XNamespace.Xmlns + "xsi", xsiNs),
new XAttribute(xsiNs + "schemaLocation",
"http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"),
new XElement(ns + "url",
//Root Element
new XElement(ns + "loc", DOMAIN),
new XElement(ns + "lastmod", LAST_MODIFY),
new XElement(ns + "changefreq", "weekly"),
new XElement(ns + "priority", TOP_PRIORITY)),
//Level0 Menu
from level0 in GetParentCMSMenu()
select new XElement(ns + "url",
new XElement(ns + "loc", String.Concat(DOMAIN, WebsiteHelpers.GetMenuRouteURL(Util.Parse<string>(level0.MENU_ALLIAS), Util.Parse<string>((level0.Level1 == null) ? string.Empty : level0.Level1), Util.Parse<int>(level0.APPLICATION_ID)))),
new XElement(ns + "lastmod", LAST_MODIFY),
new XElement(ns + "changefreq", CHANGE_FREQ),
new XElement(ns + "priority", MEDIUM_PRIORITY)
),
//Level1 Menu
from level0 in GetParentCMSMenu()
from level1 in GetLevel1Menu(Util.Parse<int>(level0.MENU_ID))
select new XElement(ns + "url",
new XElement(ns + "loc", String.Concat(DOMAIN, WebsiteHelpers.GetMenuRouteURL(Util.Parse<string>(level1.Level1), Util.Parse<string>((level1.MENU_ALLIAS == null) ? string.Empty : level1.MENU_ALLIAS), Util.Parse<int>(level1.APPLICATION_ID)))),
new XElement(ns + "lastmod", LAST_MODIFY),
new XElement(ns + "changefreq", CHANGE_FREQ),
new XElement(ns + "priority", MEDIUM_PRIORITY)
),
//Level2 Menu
from level0 in GetParentCMSMenu()
from level1 in GetLevel1Menu(Util.Parse<int>(level0.MENU_ID))
from level2 in GetLevel2Menu(Util.Parse<int>(level1.MENU_ID))
select new
XElement(ns + "url",
new XElement(ns + "loc", String.Concat(DOMAIN, WebsiteHelpers.GetMenuRouteURL(Util.Parse<string>(level2.Menu), Util.Parse<string>(level2.Level1), Util.Parse<int>(level2.AppID), Util.Parse<string>(level2.Level2)))),
new XElement(ns + "lastmod", LAST_MODIFY),
new XElement(ns + "changefreq", CHANGE_FREQ),
new XElement(ns + "priority", MEDIUM_PRIORITY)
)
));
//XDocument End
xDoc.Save(Server.MapPath("~/") + fileName);
this.MessageHolder.Visible = true;
this.MessageHolder.Attributes.Add("class", "success");
this.MessageHolder.InnerHtml = "Sitemap.xml created successfully";
}
catch (Exception ex)
{
this.MessageHolder.Visible = true;
this.MessageHolder.Attributes.Add("class", "error");
this.MessageHolder.InnerHtml = Constants.ERROR_LONG_MESSAGE + "<br/>" + ex.ToString();
}
}
是页面的摘录:) 页面
我制作了这个库,它可以很容易地从一个类创建谷歌站点地图或列出一个 url。
你可以看看这个 NuGet 包(支持 .Net 和 .Net Core) https://www.nuget.org/packages/xsitemap/
class Program
{
static void Main(string[] args)
{
var sitemap = new Sitemap();
sitemap.Add(new Url
{
ChangeFrequency = ChangeFrequency.Daily,
Location = "http://www.example.com",
Priority = 0.5,
TimeStamp = DateTime.Now
});
sitemap.Add(CreateUrl("http://www.example.com/link1"));
sitemap.Add(CreateUrl("http://www.example.com/link2"));
sitemap.Add(CreateUrl("http://www.example.com/link3"));
sitemap.Add(CreateUrl("http://www.example.com/link4"));
sitemap.Add(CreateUrl("http://www.example.com/link5"));
//Save sitemap structure to file
sitemap.Save(@"d:\www\example.com\sitemap.xml");
//Split a large list into pieces and store in a directory
sitemap.SaveToDirectory(@"d:\www\example.com\sitemaps");
//Get xml-content of file
Console.Write(sitemap.ToXml());
Console.ReadKey();
}
private static Url CreateUrl(string url)
{
return new Url
{
ChangeFrequency = ChangeFrequency.Daily,
Location = url,
Priority = 0.5,
TimeStamp = DateTime.Now
};
}
}
原始项目可在此处获得 https://github.com/ernado-x/X.Web.Sitemap
等等瞧!:)
If your your site pages are linked to each other and an orginary user can surf all of them (having necessary links in pages content), it is possible to create a list of site's webpages recursively and put it to an xml file (adhering to standards of sitemap protocol) Code snippet of url list generator from working app:
...
new_urls.Add(BaseUrl); //first url
do
{
List hrefs=new List();
foreach (var url in new_urls)
{
string text =await _loader.Get(url);
if (string.IsNullOrEmpty(text)) continue;
visited.Add(url);
List meta=Parser.GetAHrefs(text).Distinct().ToList(); //getting list of links
Parser.Normalize(Domain,url,ref meta);
if (Exclude) //option to exclude query from url
meta = meta.Select(u => u.Contains('?') ? u.Split('?')[0] : u).ToList();
hrefs.AddRange(meta);
hrefs = hrefs.Distinct().ToList();
}
new_urls = hrefs.Except(visited).ToList(); //excluding visited pages
}
while (new_urls.Count != 0);
...
Plain text to xml parsing method:
public void Save(string path)
{
string doc = "<?xml version=\"1.0\" encoding=\"UTF - 8\"?>";
doc += OpenTag("urlset", "xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"");
if (UseOpt)
{
foreach (var url in Urls)
{
doc += OpenTag("url");
doc += Tag("loc", url);
doc += Tag("lastmod", LastMode);
doc += Tag("changefreq", Changefreq);
doc += Tag("priority", Priority);
doc += CloseTag("url");
}
}
else
{
foreach(var url in Urls)
{
doc += OpenTag("url");
doc += Tag("loc", url);
doc += CloseTag("url");
}
}
doc += CloseTag("urlset");
File.WriteAllText(path,doc);
}