У меня есть запрос Linq-2-XML, который не будет работать, если у созданной мной карты сайта Google есть элемент urlset, заполненный атрибутами, но он будет работать нормально, если нет атрибутов.
Невозможно запросить:
<?xml version="1.0" encoding="utf-8"?> <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://www.foo.com/index.htm</loc> <lastmod>2010-05-11</lastmod> <changefreq>monthly</changefreq> <priority>1.0</priority> </url> <url> <loc>http://www.foo.com/about.htm</loc> <lastmod>2010-05-11</lastmod> <changefreq>monthly</changefreq> <priority>1.0</priority> </url> </urlset>
Может запросить:
<?xml version="1.0" encoding="utf-8"?> <urlset> <url> <loc>http://www.foo.com/index.htm</loc> <lastmod>2010-05-11</lastmod> <changefreq>monthly</changefreq> <priority>1.0</priority> </url> <url> <loc>http://www.foo.com/about.htm</loc> <lastmod>2010-05-11</lastmod> <changefreq>monthly</changefreq> <priority>1.0</priority> </url> </urlset>
Запрос:
XDocument xDoc = XDocument.Load(@"C:\Test\sitemap.xml"); var sitemapUrls = (from l in xDoc.Descendants("url") select l.Element("loc").Value); foreach (var item in sitemapUrls) { Console.WriteLine(item.ToString()); }
В чем причина?
См. Тег "xmlns =" в XML? Вам необходимо указать пространство имен. Протестируйте следующую модификацию вашего кода:
XDocument xDoc = XDocument.Load(@"C:\Test\sitemap.xml"); XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9"; var sitemapUrls = (from l in xDoc.Descendants(ns + "url") select l.Element(ns + "loc").Value); foreach (var item in sitemapUrls) { Console.WriteLine(item.ToString()); }