2

我需要 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

4 回答 4

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-> gender

于 2013-10-31T12:17:32.653 回答
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是部门元素。从中我们得到所有带有 value 的性别male。所以变量men只有性别。如果您想要整个person元素,请使用 men'sParent属性来获得它。例如:

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

分配给文本框:

numberTextBox.Text = count.ToString(); // or men.Length.ToString()
于 2013-11-01T17:24:39.287 回答
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);

希望这可以帮助。

于 2013-10-31T13:54:14.090 回答
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;
于 2013-10-31T12:21:25.303 回答