/ / XML XDocument - Изглежда няма елементи - c #, xml

XML XDocument - Изглежда, че няма елементи - c #, xml

Опитвам се да разбера XDocument и различните методи.

Имам карта на сайта и се опитвам да прочета URL адресите

<urlset xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>http://www.site.co.uk/</loc>
</url>
<url>
<loc>http://www.site.co.uk/page</loc>
</url>
</urlset>

Горното разказва глоба и се опитвам да прочета стойностите на мястото (URL адресите на страниците), но там, където греша

        string siteMapText = String.Empty();
GetValueOfPageFromWebClient(SiteMapUrl, out siteMapText);

XDocument siteMap =
XDocument.Parse(siteMapText);

foreach (var loc in siteMap.Descendants())
{
//logic
}

В моя C #

loc.Element("loc").Value //should show value but doesn"t

Как да повтарям loc стойности?

РЕДАКТИРАНЕ

Както казах на Джон Скийт, аз се опитах

Ако го направя

  foreach (var loc in siteMap.Descendants("loc"))
{
//never enters
}

Същото важи и за

  foreach (var loc in siteMap.Descendants("url"))
{
//never enters
}

Трябваше да направя foreach (var място в siteMap.Descendants ()) { ако (loc.Name.LocalName! = "url") продължи; // код }

Може ли някой да обясни защо това е така?

Отговори:

2 за отговор № 1

Как да повтарям местните стойности?

Най-простият начин е да използвате претоварването Descendants който приема XName:

foreach (var loc in siteMap.Descendants("loc"))
{
string value = loc.Value;
...
}

В момента вие питате за loc елемент във всеки елемент - но нито коренният, нито елементът loc съдържат елементи loc детски елементи, така че Element се завръща null, което води до изключение.

Сега изглежда, че XML не е всъщност тъй като сте я показали, че е във въпроса.Вместо това, тя има стандартно пространство за имена:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" ...>

Така че всички потомствени елементи също са в това пространство на имена, защото не посочват нищо друго ... така че трябва да укажете пространството на имената, когато търсите неща. За щастие, това е лесно:

XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";
foreach (var loc in siteMap.Descendants(ns + "loc"))
{
...
}