C# 无法将“xmlns”属性添加到sitemap.xml中的urlset
我生成了一个sitemap.xmlC# 无法将“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...) 我犯了一个错误 不能在同一开始元素标记
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库中使用属性操纵代码来操纵它们。