Я пытаюсь пройти через простую карту сайта (добавление и удаление элементов на лету.) Это пример макета
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 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"> <url> <loc>http://mysite.com/</loc> <priority>1.00</priority> <changefreq>daily</changefreq> </url> <url> <loc>http://mysite.com/Default.aspx</loc> <priority>0.80</priority> <changefreq>daily</changefreq> </url> </urlset>
Странно, когда я пытаюсь получить доступ к дочернему элементу с помощью метода Element () после загрузки документа, он равен нулю, как и Elements (), поэтому я не могу просмотреть их. У метода Nodes () есть элементы.
Вот код, который я написал
XElement siteMap = XElement.Load(Server.MapPath("~/sitemap.xml")); //First remove all article nodes foreach (XElement elem in siteMap.Elements()) { XElement loc = elem.Element("loc"); if (loc.Value.Contains("http://mysite.com/articles/")) elem.Remove(); }
Независимо от того, что я делаю, чтобы попытаться получить элементы элемента (Элемент, Элементы), я получаю ноль.
Что может быть не так? Этот код должен работать. Не так ли?
var doc = XDocument.Load(Server.MapPath("~/sitemap.xml")); foreach (XElement elem in doc.Root.Elements()) { var loc = elem.Element(XName.Get("loc","http://www.sitemaps.org/schemas/sitemap/0.9") ); if (loc.Value.Contains("http://astrobix.com/articles/")) elem.Remove(); }
Вы также можете сделать следующее:
doc.Root.Elements() .Where(x => x.Element(XName.Get("loc", "http://www.sitemaps.org/schemas/sitemap/0.9")) .Value.Contains("http://astrobix.com/articles/")) .Remove();