繁体   English   中英

如何在C#中删除不必要的xmlns属性?

[英]How to remove unnecessary xmlns attribute in C#?

我试图更新现有的XML文件,但是总是在更新时添加新标签,而xmlns =“”属性却神秘地出现在所有标签中,而我却找不到删除它的方法。

    private static void EditarXML(string path, List<SiteUrl> listaUrls, bool indice, string loc)
    {
        XmlDocument documentoXML = new XmlDocument();
        documentoXML.Load(path);

            XmlNode sitemap = documentoXML.CreateElement("sitemap");

            XmlNode xloc = documentoXML.CreateElement("loc");
            xloc.InnerText = loc;
            sitemap.AppendChild(xloc);

            XmlNode lastmod = documentoXML.CreateElement("lastmod");
            lastmod.InnerText = DateTime.Now.ToShortDateString();
            sitemap.AppendChild(lastmod);

            documentoXML.DocumentElement.AppendChild(sitemap);
    }

任何帮助或想法,将不胜感激。

对于要追加到其上的父节点具有名称空间的情况,会发生这种情况,但是您没有在CreateElement()调用中指定它。

为了解决这个问题,您可以像这样从DocumentElement获取名称空间(我的示例只是在内存中创建文档,但是原理是相同的),然后将其传递给CreateElement()

  if (x.DocumentElement != null) {
    var xmlns = (x.DocumentElement.NamespaceURI);
    var sitemap = x.CreateElement("sitemap", xmlns);

    var xloc = x.CreateElement("loc", xmlns);
    xloc.InnerText = "Hello";
    sitemap.AppendChild(xloc);

    var lastmod = x.CreateElement("lastmod", xmlns);
    lastmod.InnerText = DateTime.Now.ToShortDateString();
    sitemap.AppendChild(lastmod);

    x.DocumentElement.AppendChild(sitemap);
  }
  Console.WriteLine(x.InnerXml);

输出量

<test xmlns="jdphenix"><sitemap><loc>Hello</loc><lastmod>4/20/2015</lastmod></sitemap></test>

请注意,如果未将父名称空间传递给每个CreateElement()调用,则该调用的子级将具有空白xmlns

  // incorrect - appends xmlns=""
  if (x.DocumentElement != null) {
    var sitemap = x.CreateElement("sitemap");

    var xloc = x.CreateElement("loc");
    xloc.InnerText = "Hello";
    sitemap.AppendChild(xloc);

    var lastmod = x.CreateElement("lastmod"); 
    lastmod.InnerText = DateTime.Now.ToShortDateString();
    sitemap.AppendChild(lastmod);

    x.DocumentElement.AppendChild(sitemap);
  }
  Console.WriteLine(x.InnerXml);

输出量

<test xmlns="jdphenix"><sitemap xmlns=""><loc>Hello</loc><lastmod>4/20/2015</lastmod></sitemap></test>

相关阅读: 为什么.NET XML为什么将xlmns属性附加到我添加到文档中的XmlElements? 我可以阻止它吗?

如何防止从.NET的XmlDocument输出的空白xmlns属性?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM