在使用LINQ to XML生成动态sitemap.xml时,如何正确生成xsi:schemalocation属性?

我正在生成一个动态的sitemap.xml

根据sitemaps.org,这是sitemap.xml的标头

   ...   

所以我使用LINQ To XML生成sitemap.xml

 XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; return new XElement(ns + "urlset", new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"), //new XAttribute("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"), from node in new GetNodes() select new XElement(ns + "url", new XElement(ns + "loc", node.Loc), new XElement(ns + "lastmod", node.LastMod), new XElement(ns + "priority", node.Priority) ) ).ToString(); 

注释行是我无法正确的。
如何设置“xsi:schemalocation”属性?

谢谢。

好吧,我做对了。 感谢Mike Caron
如果我声明XAtrribute(XNamespace.Xmlns +“xsi”,…)那么它的工作原理

 XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; return new XElement(ns + "urlset", new XAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9"), new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance"), new XAttribute(xsi + "schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"), from node in GetNodes() select new XElement(ns + "url", new XElement(ns + "loc", node.Loc), new XElement(ns + "lastmod", node.LastMod), new XElement(ns + "priority", node.Priority) ) ).ToString(); 

我不知道LINQ to XML,但在快速查看文档之后,试试这个:

 XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; return new XElement(ns + "urlset", new XAttribute(xsi + "schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"), from node in new GetNodes() select new XElement(ns + "url", new XElement(ns + "loc", node.Loc), new XElement(ns + "lastmod", node.LastMod), new XElement(ns + "priority", node.Priority) ) ).ToString(); 

请注意,我没有显式设置xmlns属性。 我怀疑它们是自动生成的。 另外,请注意,因为这没有经过测试。