【问题标题】:Count XML element Value计数 XML 元素值
【发布时间】:2018-04-23 04:52:54
【问题描述】:

我正在尝试计算团队元素中的值,抛出所有 Xml 节点并将其填充到以下格式的列表框中:Team1,Count 3。 求帮助

    XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Team");
        foreach (XmlNode xNode in nodeList)
        {
            foreach (var item in xNode)
            {
                lstRegPartiData.Items.Add(xNode.InnerText + item);   
            }
        }

我在这里尝试按值计算元素。

这是我的 xml 模板。

           <Participants>
              <Participant>
                <DateTime>21.04.2018</DateTime>
                <FullName>N1</FullName>
                <Email>email@gmail.com</Email>
                <Phone>123456789</Phone>
                <DateOfBirth>00/00/1988</DateOfBirth>
                <Team>Team1</Team>
                <MainWeapon>T1</MainWeapon>
                <MainWeaponChrono>120-130 m\s</MainWeaponChrono>
                <WeaponClass>C1</WeaponClass>
                <Comment>Hello World</Comment>
              </Participant>
              <Participant>
                <DateTime>21.04.2018</DateTime>
                <FullName>N1</FullName>
                <Email>email@gmail.com</Email>
                <Phone>987654321</Phone>
                <DateOfBirth>00/00/1988</DateOfBirth>
                <Team>Team1</Team>
                <MainWeapon>T1</MainWeapon>
                <MainWeaponChrono>120-130 m\s</MainWeaponChrono>
                <WeaponClass>C1</WeaponClass>
                <Comment>My Comment</Comment>
              </Participant>
               <Participant>
                <DateTime>21.04.2018</DateTime>
                <FullName>N1</FullName>
                <Email>email@gmail.com</Email>
                <Phone>123456789</Phone>
                <DateOfBirth>00/00/1988</DateOfBirth>
                <Team>Team1</Team>
                <MainWeapon>T1</MainWeapon>
                <MainWeaponChrono>120-130 m\s</MainWeaponChrono>
                <WeaponClass>C1</WeaponClass>
                <Comment>Hello World</Comment>
              </Participant>
            </Participants>

【问题讨论】:

    标签: c# xml xmldocument


    【解决方案1】:

    也许你可以做这样的事情

    XmlDocument readDoc = new XmlDocument();
    readDoc.Load(@"XML.xml");
    var Node = readDoc.SelectNodes("Participants/Participant/Team");
    Dictionary<string, int> teamList = new Dictionary<string, int>();
    foreach (XmlNode n in Node)
    {
        if (teamList.ContainsKey(n.InnerText))
            teamList[n.InnerText]++;
        else
            teamList.Add(n.InnerText, 1);
    }
    

    我知道它看起来不太好,但它应该可以工作

    【讨论】:

    • BINGO!,谢谢帮助
    【解决方案2】:

    如果我们假设您的 xml 类似于:

    <Root>
    <Team name="team1">
     <Participants>
                  <Participant> 
                  </Participant>
                  <Participant>
    
                  </Participant>
                   <Participant>
    
                  </Participant>
     </Participants>
    </Team>
    <Team name="team2">
     <Participants>
                  <Participant> 
                  </Participant> 
                  <Participant> 
                  </Participant>
     </Participants>
    </Team>
    </Root>
    

    然后将您的代码更改为:

    XDocument xdoc = XDocument.Load(@"your xml path");
    var teams = xdoc.Descendants("Team");
    foreach (XElement team in teams)
    {
        var firstElement = team.Elements();//Get all elements, here is only one element
        var participants = firstElement.Elements();
        int teamCount = participants.Count();
        var teamName = team.FirstAttribute.Value;
        Console.Out.WriteLine("{0} contains {1} member(s)...", teamName, teamCount); 
    }
    Console.ReadLine();
    

    注释:

    1- 每个xml 文件不能有一个根元素,这里是&lt;Root&gt;

    2- 我认为每个 team 元素中都有一个元素,所以 team.Elements() 为您提供所有元素。

    3- 我想每个team 元素都有一个名为name 的属性,所以team.FirstAttribute.Value 给你team 元素的name,否则你应该使用类似team.Attributes("name") 的东西来获取属性.

    【讨论】:

    • 嘿,谢谢你的回答,但很遗憾,XML 结构不能更改。
    • 所以提供一个完整的示例,删除一部分,编辑问题并完全发布您的 xml 示例。
    • 但这并不完整,因为您询问了迭代team元素并为它们计数Participant
    猜你喜欢
    • 2011-05-22
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多