我需要一些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
答案 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,而是检索int
(Count
返回的内容)。
使用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()