在使用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属性。 我怀疑它们是自动生成的。 另外,请注意,因为这没有经过测试。