[英]Get all occurrences of specific child node within a parent
我有一个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
如果您将文档作为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));
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.