2013-06-17 2 views
1

У меня есть файл XML, что-то вроде этогоПолучить все вхождения конкретного дочернего узла в пределах родительского

<ORG> 
    <LIST_SITES> 
     <SITE> 
      <LIST_SERVICES> 
       <SERVICE> 
        <NAME> 
        </NAME> 
        <LOCATION> 
        </LOCATION> 
       </SERVICE> 
       <SERVICE> 
        <NAME> 
        </NAME> 
        <LOCATION> 
        </LOCATION> 
       </SERVICE> 
      </LIST_SERVICES> 
     </SITE> 
     <SITE> 
      .... 
     </SITE> 
    </LIST_SITES> 
</ORG> 

Хотя разбора файла XML я должен рассчитывать, если несколько сервисов в пределах одного узла имеют одинаковое имя. В настоящее время я проверяю все узлы во всем файле, но мне нужно только сравнивать узлы для служб внутри одного и того же узла. Кто-нибудь может мне с этим помочь? Я попробовал следующее, но это то, что читает все узлы.

XmlNodeList xnList = myDoc.SelectNodes("/ORG/LIST_SITES/SITE/LIST_SERVICES/SERVICE"); 

foreach (XmlNode xn in xnList) 
{ 
    string sName = xn["NAME"].InnerText; 

    if (currentNode.Value == sName)   
     //increment counter 
} 

в основном я считаю, что я остальную часть кода точно, я просто не могу понять, как загрузить xnList только с узлами от узла В настоящее время я смотрел на

+0

так, ваша проблема в только глядя на СЕРВИС в LIST_SERVICE, в котором вы сейчас находитесь? – Jonesopolis

ответ

0

Если у вас есть документ как XDocument вы можете использовать следующий запрос, чтобы найти все узлы, которые разделяют имя в пределах одного LIST_SERVICES родителя:

var query = mydoc.Descendants("LIST_SERVICES") 
    .SelectMany(services => services.Elements("SERVICE") 
     .GroupBy(service => service.Element("NAME").Value) 
     .Where(group => group.Count() > 1)); 
0
XDocument doc = XDocument.Load("file.xml"); 
var serviceNodes = doc.Descendants("service"); 

Dictionary<string, int> dict = new Dictionary<string,int>(); 

foreach(string name in serviceNodes.Element("Name")) 
{ 
    if(dict.ContainsKey(name)) 
    { 
     dict[name]++; 
    } 
    else 
    { 
     dict[name]=1; 
    } 
} 

foreach(int item in dict) 
{ 
    Console.WriteLine("{0}={1}",item.Key,item.Value); 
} 
Смежные вопросы