C# 无法将“xmlns”属性添加到sitemap.xml中的urlset

C# 无法将“xmlns”属性添加到sitemap.xml中的urlset,c#,xml,xml-namespaces,xml-sitemap,C#,Xml,Xml Namespaces,Xml Sitemap,我生成了一个sitemap.xml XDocument xDoc = new XDocument( new XDeclaration("1.0", "UTF-8", ""), new XElement("urlset", new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), new Element (....and so on...) 我犯了一个错误 不能在同一开始元素标记

我生成了一个sitemap.xml

XDocument xDoc = new XDocument(
    new XDeclaration("1.0", "UTF-8", ""),
    new XElement("urlset",
    new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"),
    new Element (....and so on...)
我犯了一个错误

不能在同一开始元素标记中从到重新定义前缀


Google需要不带任何前缀的xmlns属性。

似乎在XDocument中添加默认名称空间有点棘手,相关问题如下:

您可以尝试声明默认名称空间前缀,并将该前缀用于like so中的所有元素:

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
XDocument xDoc = new XDocument(
    new XDeclaration("1.0", "UTF-8", ""),
    new XElement(ns+"urlset",
    new XElement(ns+"otherElement"),
    new XElement (....and so on...)

您可以使用如下空白命名空间来解决此问题:

    XNamespace blank = XNamespace.Get(@"http://www.sitemaps.org/schemas/sitemap/0.9");

    XDocument doc = new XDocument(
        new XDeclaration("1.0", "utf-8", "yes"),
        new XElement(blank + "urlset",
            new XAttribute("xmlns", blank.NamespaceName),  
            new XElement(blank + "loc", "http://www.abc.eba/"),               
            new Element (....and so on...)
         ));
实际上,xmlns不是一个属性。这是一个名称空间声明。它们看起来很相似,但XML认为它们是不同类型的东西,所以您不应该期望在设计良好的XML库中使用属性操纵代码来操纵它们。