Значение атрибута и его количество в XML-файле - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть xml-документ
Листинг программы
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <root>
  3. <hotel hname="Attica" hcountry="Greece" hcity="Athens">
  4. <stars>5</stars>
  5. <client>
  6. <fio>Juliennes J.</fio>
  7. <num>5</num>
  8. <age>45</age>
  9. <country>France</country>
  10. <ofhotel>Attica</ofhotel>
  11. </client>
  12. </hotel>
  13. <hotel hname="Electra" hcountry="Greece" hcity="Athens">
  14. <stars>4</stars>
  15. <client>
  16. ...
  17. </client>
  18. </hotel>
  19. <hotel hname="Lozenge" hcountry="Spain" hcity="Madrid">
  20. <stars>5</stars>
  21. <client>
  22. ...
  23. </client>
  24. </hotel>
  25. <hotel hname="Medplaya" hcountry="Spain" hcity="Barcelona">
  26. <stars>3</stars>
  27. <client>
  28. ...
  29. </client>
  30. </hotel>
  31. </root>
Нужно вывести города и количество отелей в каждом. Делаю так, но выводит общее число отелей.
Листинг программы
  1. XElement xe = XElement.Load("d:\\test.xml");
  2. int res = (from s in xe.Descendants("hotel") select s).Count();
  3. MessageBox.Show("Количество: " + res.ToString());
Как сделать так, чтобы было "Город : количество отелей"?

Решение задачи: «Значение атрибута и его количество в XML-файле»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml.Serialization;
  7. using System.IO;
  8.  
  9. namespace ConsoleApplication10 {
  10.     class Program {
  11.         static void Main(string[] args) {
  12.             Root root = GetXmlRoot("test.xml");
  13.             var result = root.Hotel.GroupBy(h => h.Hcity).Select(n => new { City = n.Key, HotelCount = n.Count() });
  14.             foreach (var r in result) {
  15.                 Console.WriteLine(r);
  16.             }
  17.             Console.ReadLine();
  18.         }
  19.         static Root GetXmlRoot(string path) {
  20.             if (!File.Exists(path)) {
  21.                 return null;
  22.             }
  23.             using (Stream fs = File.OpenRead(path)) {
  24.                 XmlSerializer xml = new XmlSerializer(typeof(Root));
  25.                 Root root = (Root)xml.Deserialize(fs);
  26.                 return root;
  27.             }
  28.         }
  29.     }
  30.     [XmlRoot(ElementName = "client")]
  31.     public class Client {
  32.         [XmlElement(ElementName = "fio")]
  33.         public string Fio { get; set; }
  34.         [XmlElement(ElementName = "num")]
  35.         public string Num { get; set; }
  36.         [XmlElement(ElementName = "age")]
  37.         public string Age { get; set; }
  38.         [XmlElement(ElementName = "country")]
  39.         public string Country { get; set; }
  40.         [XmlElement(ElementName = "ofhotel")]
  41.         public string Ofhotel { get; set; }
  42.     }
  43.  
  44.     [XmlRoot(ElementName = "hotel")]
  45.     public class Hotel {
  46.         [XmlElement(ElementName = "stars")]
  47.         public string Stars { get; set; }
  48.         [XmlElement(ElementName = "client")]
  49.         public Client Client { get; set; }
  50.         [XmlAttribute(AttributeName = "hname")]
  51.         public string Hname { get; set; }
  52.         [XmlAttribute(AttributeName = "hcountry")]
  53.         public string Hcountry { get; set; }
  54.         [XmlAttribute(AttributeName = "hcity")]
  55.         public string Hcity { get; set; }
  56.     }
  57.  
  58.     [XmlRoot(ElementName = "root")]
  59.     public class Root {
  60.         [XmlElement(ElementName = "hotel")]
  61.         public List<Hotel> Hotel { get; set; }
  62.     }
  63. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут