防止创建空的xmlns属性

时间:2018-10-05 09:09:43

标签: c# xml

我有一个小问题。当我将以下代码添加到我的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=""

2 个答案:

答案 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;