Linq2XML, Почему не работает Element (), Elements ()? - PullRequest
4 голосов
/ 20 февраля 2009

Я пытаюсь пройти через простую карту сайта (добавление и удаление элементов на лету.) Это пример макета

<?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();
}

Независимо от того, что я делаю, чтобы попытаться получить элементы элемента (Элемент, Элементы), я получаю ноль.

Что может быть не так? Этот код должен работать. Не так ли?

1 Ответ

3 голосов
/ 20 февраля 2009
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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...