按性别统计人数

时间:2013-10-31 12:14:36

标签: c# xml

我需要一些C#和XML的帮助。

我正在构建一个Web应用程序,需要在特定部门提供有关性别男性人数的信息(Dep1中有多少人)。

这是我的XML文件:

<company>
  <department>
    <departmentname>Dep 1</departmentname>
    <people>
      <person>
        <name>Sean</name>
        <date>2013-10-10</date>
        <gender>male</gender>
        <age>40</age>
      </person>
      <person>
        <name>John</name>
        <date>2013-10-18</date>
        <gender>male</gender>
        <age>45</age>
      </person>
      <person>
        <name>Linda</name>
        <date>2013-09-10</date>
        <gender>female</gender>
        <age>42</age>
      </person>
      <person>
        <name>Bob</name>
        <date>2013-10-01</date>
        <gender>male</gender>
        <age>35</age>
      </person>
    </people>
  </department>
  <department>
    <departmentname>Dep 2</departmentname>
    <people>
      <person>
        <name>Art</name>
        <date>2013-09-10</date>
        <gender>male</gender>
        <age>38</age>
      </person>
      <person>
        <name>Christina</name>
        <date>2013-10-20</date>
        <gender>female</gender>
        <age>45</age>
      </person>
      <person>
        <name>Marie</name>
        <date>2013-09-10</date>
        <gender>female</gender>
        <age>49</age>
      </person>
    </people>
  </department>
</company>

我的代码(未完成且无法正常工作):

XElement company= XElement.Load(Server.MapPath("myXML.xml"));

XElement department= (from p in company.Elements("department")
                     where p.Element("departmentname").Value == 'Dep 1' && p.Element 
                     ("gender").Value == 'male'
                    select p).Count;  

numberTextBox.Text = department.Element; //???How to write to textbox

4 个答案:

答案 0 :(得分:2)

var department = (from p in company.Elements("department")
                 where p.Element("departmentname").Value == "Dep 1" && p.Element 
                 ("gender").Value == "male"
                select p).Count();  

您没有检索到XElement,而是检索intCount返回的内容)。 使用var会为您推断出这一点。

根据我的评论:kon - &gt; gender

答案 1 :(得分:0)

希望这会对你有帮助..

XmlDocument doc = new XmlDocument();
doc.Load(your document);
var items = doc.GetElementsByTagName("gender");
var x=items.Count;
int malecount=doc.SelectNodes("gender[. = \"male\"]").Count;

答案 2 :(得分:0)

您可以尝试使用XMLDocument和Xpath,只需使用以下代码

        var xpath = "/company/department[departmentname='Dep 1']/people/person[/company/department/people/person/gender='male']/name";
        var xmldoc = new XmlDocument();
        xmldoc.Load("company.xml");
        var result = xmldoc.SelectNodes(xpath);
        if (result != null) Assert.AreEqual(4,result.Count);

希望这有帮助。

答案 3 :(得分:0)

让我们将搜索的一些元素分开,以便更容易理解:

XElement depName = company.Descendants("departmentname")
                          .Where(x => x.Value == "Dep 1")
                          .FirstOrDefault();

XElement[] men = depName.Parent.Descendants("gender")
                        .Where(x => x.Value == "male")
                        .Where(x => (int)x.Parent.Element("age") > 40)
                        .ToArray();

int count = men.Length;

depName.Parent是部门元素。从那里我们得到所有性别的值male。所以变量men只是性别。如果你想要整个person元素,请使用men的Parent属性来获取它。例如:

foreach(XElement man in men)
    Console.Writeline(man.Parent.Element("name").Value);

要分配到文本框:

numberTextBox.Text = count.ToString(); // or men.Length.ToString()