2013-11-08 1 views
1

Может кто-то, пожалуйста, помогите мне. Я новичок в XML и xElement. Как я могу получить число мужчин, где год = 2013? Результат должен быть 300.XML Получить элемент на основе атрибута

У меня есть этот 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> 

У меня есть этот код (не работает):

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>(); 
+0

Что касается других отделов! – Anirudha

ответ

0

Предполагая, что вы хотите от всех отделов

int mens=company.Descendants("year") 
       .Where(x=>x.Attribute("id").Value=="2013") 
       .Sum(x=>int.Parse(x.Element("men").Value)); 

Ваш запрос должен быть

int men = (from a in company.Elements("department").Elements("year") 
      where a.Attribute("id").Value == "2013" 
      select int.Parse(a.Element("men").Value)).Sum(); 
+0

Я бы предпочел использовать xElement так, как я начал. Как я могу это сделать? – user2939293

+0

@ user2939293 проверить редактирование – Anirudha

+0

Спасибо, но он не работает – user2939293

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

var txt = company.Descendants("men") 
    .First(x => int.Parse(x.Parent.Attribute("id").Value) == 2013).Value; 

не очень надежен, но будет выполнять работу в вашем случае, и вы должны получить идею.

И с синтаксисом LINQ, а не метод расширения:

var txt = 
    (from c in company.Descendants("men") 
    where c.Parent.Attribute("id").Value == "2013" 
    select c).First().Value; 
+0

Я бы предпочел использовать xElement так, как я начал. Как я могу это сделать? – user2939293

+0

Как вы начали? Вы имеете в виду использование синтаксиса LINQ, а не методов расширения? – Ben

1

Что об использовании 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); 
0

Хорошо, ребята. Я использовал это, и он работает Спасибо за помощь!

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>();