我有一个小问题。当我将以下代码添加到我的xml文件时,将添加一个空的xmlns =“” beinmg。我如何阻止这种情况发生?
XmlDocument doc = new XmlDocument();
doc.Load(HttpContext.Current.Server.MapPath(@"~/Sitemap.xml"));
XmlElement root = doc.DocumentElement;
XmlElement ele = doc.CreateElement("url");
ele.Attributes.RemoveNamedItem("xmlns");
XmlElement locele = doc.CreateElement("loc");
locele.InnerText = urlstring;
XmlElement lastmodele = doc.CreateElement("lastmod");
lastmodele.InnerText = DateTime.Now.ToString();
XmlElement chgfrqele = doc.CreateElement("changefreq");
chgfrqele.InnerText = "weekly";
ele.AppendChild(locele);
ele.AppendChild(lastmodele);
ele.AppendChild(chgfrqele);
root.AppendChild(ele);
doc.Save(HttpContext.Current.Server.MapPath(@"~/Sitemap.xml"));
我输出的xml应该如下所示:
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>www.url.com/test</loc>
<lastmod>03/10/2018 10:01:43</lastmod>
<changefreq>weekly</changefreq>
</url>
<url>
<loc>www.url.com/test</loc>
<lastmod>05/10/2018 09:31:12</lastmod>
<changefreq>weekly</changefreq>
</url>
</urlset>
不幸的是,它最终看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url xmlns="">
<loc>www.url.com/test</loc>
<lastmod>05/10/2018 09:15:40</lastmod>
<changefreq>weekly</changefreq>
</url>
<url xmlns="">
<loc>www.url.com/test</loc>
<lastmod>05/10/2018 09:21:40</lastmod>
<changefreq>weekly</changefreq>
</url>
</urlset>
如何停止将以下内容添加到我的URL元素?:
xmlns=""
答案 0 :(得分:0)
尝试一下:
private static void RemoveEmptyNamespace(XElement element)
{
XAttribute attr = element.Attribute("xmlns");
if (attr != null && string.IsNullOrEmpty(attr.Value))
attr.Remove();
foreach (XElement el in element.Elements())
RemoveEmptyNamespace(el);
}
答案 1 :(得分:0)
xmlns
被称为默认元素。注意,没有前缀的后代元素会隐式继承祖先的默认名称空间。当您创建元素时未指定任何名称空间时,它将在空名称空间中创建,而不是在默认名称空间中创建,因此将创建xmlns=""
。因此,为避免这种情况,您需要在创建新元素时指定名称空间,例如:
XmlElement locele = doc.CreateElement("loc", "http://www.sitemaps.org/schemas/sitemap/0.9");
locele.InnerText = urlstring;