Как подсчитать узлы в XML, которые были прочитаны в строку - PullRequest
0 голосов
/ 28 сентября 2011

Я уверен, что решение довольно тривиально для опытных, но это не для меня. Я прочитал XML-файл в строку strSiteList. Вот сокращенный образец XML:

<siteList>
  <site code="s0000001">
    <nameEn>Edmonton</nameEn>
    <provinceCode>AB</provinceCode>
  </site>
  <site code="s0000002">
    <nameEn>Vancouver</nameEn>
    <provinceCode>BC</provinceCode>
  </site>
</siteList>

Как подсчитать, сколько раз сайт появляется? Я начал с этого:

XDocument loaded = XDocument.Parse(strSiteList);
int sitesCount = loaded.Nodes().Count(d => "some code that should work...arg...";

Но я заблудился относительно того, правильно ли это начинать или нет.

Спасибо!

Ответы [ 3 ]

5 голосов
/ 28 сентября 2011

Конкретный сайт?Для меня это звучит так:

string site = "s0000002";
XDocument loaded = XDocument.Parse(xml);
int sitesCount = loaded.Descendants("site")
                       .Count(x => (string) x.Attribute("code") == site);

Для всех сайтов, просто:

int sitesCount = loaded.Descendants("site").Count();
1 голос
/ 28 сентября 2011

Вы можете использовать простое выражение XPath (требуется «System.Xml.XPath»):

XDocument loaded = XDocument.Parse(xml);
int sitesCount = loaded.XPathSelectElements("siteList/site").Count();
0 голосов
/ 28 сентября 2011

Предполагая, что он прочитан правильно, вы должны быть в состоянии сделать это:

int sitesCount = loaded.Descendants("site").Where(x => x.Attribute("code").Value == "1234").Count();

Вы также можете сделать это:

int sitesCount = loaded.Descendants("site").Count(x => x.Attribute("code").Value == "1234");

Если вы ищете количество всех сайтов, вы можете просто сделать это:

int sitesCount = loaded.Descendants("site").Count();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...