我在生成时遇到问题
sitemap.xml
我的创作者代码是这样的:
XNamespace xmlns = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9");
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace schemaLocation = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
XElement urlset = new XElement(xmlns+"urlset",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", schemaLocation));
urlset.Add(new XElement("url"));
此代码生成 xml 文件,但生成的
sitemap.xml
url 元素包含 xmlns=""
属性。
<urlset xmlns="..." ><url xmlns=""/> </urlset>
所有
<url>
元素都包含 xmlns = ""
属性。
我该如何解决这个问题?
我认为 W3 Org 可以比我更好地总结命名空间,您拥有“url”节点上方的所有节点和属性的限定命名空间。当你添加
urlset.Add(new XElement("url"));
时,它应该如何确定它所在的命名空间?
我建议您尝试一下,看看它对您有何作用:
static void Main ( string [] args )
{
XNamespace xmlns = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9");
XNamespace xsi = XNamespace.Get("http://www.w3.org/2001/XMLSchema-instance");
XNamespace schemaLocation = XNamespace.Get("http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
XElement urlset = new XElement(xmlns+"urlset",
new XAttribute(XNamespace.Xmlns + "xsi", xsi),
new XAttribute(xsi + "schemaLocation", schemaLocation));
urlset.Add(new XElement(xmlns+"url")); // NB> We are qualifying the node
var s = urlset.ToString( );
Console.ReadKey( );
}
所有元素都包含
xmlns = ""
属性。这解决了我的问题
public ActionResult Index()
{
// Create Sitemap
XNamespace xmlns = "http://www.sitemaps.org/schemas/sitemap/0.9";
var sitemapXml = new XDocument(
new XDeclaration("1.0", "utf-8", "yes"),
new XElement( xmlns + "urlset", new XAttribute("xmlns", xmlns),
from url in pageUrls
select
new XElement(xmlns + "url",
new XElement(xmlns + "loc", url),
new XElement(xmlns + "lastmod", DateTime.Now.ToString("yyyy-MM-dd")),
new XElement(xmlns + "changefreq", "daily"),
new XElement(xmlns + "priority", "0.8")
)
)
);
return Content(sitemapXml.ToString(), "application/xml");
}
结果:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://sabricihan.com/</loc>
<lastmod>2023-09-12</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://sabricihan.com/Home/Contact</loc>
<lastmod>2023-09-12</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://sabricihan.com/Blog</loc>
<lastmod>2023-09-12</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
</urlset>
试试这个代码
XmlDocument stripDocumentNamespace(XmlDocument oldDom)
{
XmlDocument newDom = new XmlDocument();
newDom.LoadXml(Regex.Replace(oldDom.OuterXml,
@"(xmlns:?[^=]*=[""][^""]*[""])", "",
RegexOptions.IgnoreCase | RegexOptions.Multiline));
return newDom;
}