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 中只有来自我当前正在查看的节点的节点

4

2 回答 2

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);
}
于 2013-06-17T20:14:05.653 回答
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));
于 2013-06-17T20:12:01.250 回答