Reputation: 813
Can someone please help me. I'm new to XML and xElement. How can I get number of men where year = 2013? The result should be 300.
I have this XML:
<company>
<department>
<departmentname>Dep 1</departmentname>
<year id = "2012">
<men>200</men>
<women>1000</women>
</year>
<year id = "2013">
<men>300</men>
<women>400</women>
</year>
</department>
</company>
I have this code (not working):
XElement company = XElement.Load(Server.MapPath(myXML.xml));
var men = (from a in company.Elements("department").Elements("year")
where (string)a.Attribute("id").Value == "2013"
select (string)(a.Element("men"))).ToList<string>();
Upvotes: 1
Views: 1527
Reputation: 813
Ok guys. I used this and it's working Thank you for your help!
XElement com = (from p in company.Elements("department")
where (string)p.Element("departmentname").Value == "Dep 1"
select p).First();
var men= (from a in com.Elements("year")
where (string)a.Attribute("id") == "2013"
select (string)(a.Element("men"))).ToList<string>();
Upvotes: 0
Reputation: 57996
What about using XPath?
var xmldoc = XDocument.Parse(@"<?xml version='1.0' encoding='utf-8'?>
<company>
<department>
<departmentname>Dep 1</departmentname>
<year id = '2012'>
<men>200</men>
<women>1000</women>
</year>
<year id = '2013'>
<men>300</men>
<women>400</women>
</year>
</department>
</company>");
Console.WriteLine(
xmldoc.XPathSelectElement(
"/company/department/year[@id='2013']/men").Value);
Upvotes: 1
Reputation: 1963
XElement company = XElement.Load(Server.MapPath(myXML.xml));
var txt = company.Descendants("men")
.First(x => int.Parse(x.Parent.Attribute("id").Value) == 2013).Value;
Not very robust but will do the job in your case and you should get the idea.
And with LINQ syntax rather than extension method:
var txt =
(from c in company.Descendants("men")
where c.Parent.Attribute("id").Value == "2013"
select c).First().Value;
Upvotes: 0
Reputation: 32817
Assuming you want it from all departments
int mens=company.Descendants("year")
.Where(x=>x.Attribute("id").Value=="2013")
.Sum(x=>int.Parse(x.Element("men").Value));
Your query should be
int men = (from a in company.Elements("department").Elements("year")
where a.Attribute("id").Value == "2013"
select int.Parse(a.Element("men").Value)).Sum();
Upvotes: 0