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

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

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

Доброго времени суток! Есть xml-документ
<?xml version="1.0" encoding="utf-8"?>
<root>
  <hotel hname="Attica" hcountry="Greece" hcity="Athens">
    <stars>5</stars>
    <client>
      <fio>Juliennes J.</fio>
      <num>5</num>
      <age>45</age>
      <country>France</country>
      <ofhotel>Attica</ofhotel>
    </client>
  </hotel>
  <hotel hname="Electra" hcountry="Greece" hcity="Athens">
    <stars>4</stars>
    <client>
      ...
    </client>
  </hotel>
  <hotel hname="Lozenge" hcountry="Spain" hcity="Madrid">
    <stars>5</stars>
    <client>
      ...
    </client>
  </hotel>
  <hotel hname="Medplaya" hcountry="Spain" hcity="Barcelona">
    <stars>3</stars>
    <client>
      ...
    </client>
  </hotel>
</root>
Нужно вывести города и количество отелей в каждом. Делаю так, но выводит общее число отелей.
XElement xe = XElement.Load("d:\\test.xml");
int res = (from s in xe.Descendants("hotel") select s).Count();
MessageBox.Show("Количество: " + res.ToString());
Как сделать так, чтобы было "Город : количество отелей"?

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

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using System.IO;
 
namespace ConsoleApplication10 {
    class Program {
        static void Main(string[] args) {
            Root root = GetXmlRoot("test.xml");
            var result = root.Hotel.GroupBy(h => h.Hcity).Select(n => new { City = n.Key, HotelCount = n.Count() });
            foreach (var r in result) {
                Console.WriteLine(r);
            }
            Console.ReadLine();
        }
        static Root GetXmlRoot(string path) {
            if (!File.Exists(path)) {
                return null;
            }
            using (Stream fs = File.OpenRead(path)) {
                XmlSerializer xml = new XmlSerializer(typeof(Root));
                Root root = (Root)xml.Deserialize(fs);
                return root;
            }
        }
    }
    [XmlRoot(ElementName = "client")]
    public class Client {
        [XmlElement(ElementName = "fio")]
        public string Fio { get; set; }
        [XmlElement(ElementName = "num")]
        public string Num { get; set; }
        [XmlElement(ElementName = "age")]
        public string Age { get; set; }
        [XmlElement(ElementName = "country")]
        public string Country { get; set; }
        [XmlElement(ElementName = "ofhotel")]
        public string Ofhotel { get; set; }
    }
 
    [XmlRoot(ElementName = "hotel")]
    public class Hotel {
        [XmlElement(ElementName = "stars")]
        public string Stars { get; set; }
        [XmlElement(ElementName = "client")]
        public Client Client { get; set; }
        [XmlAttribute(AttributeName = "hname")]
        public string Hname { get; set; }
        [XmlAttribute(AttributeName = "hcountry")]
        public string Hcountry { get; set; }
        [XmlAttribute(AttributeName = "hcity")]
        public string Hcity { get; set; }
    }
 
    [XmlRoot(ElementName = "root")]
    public class Root {
        [XmlElement(ElementName = "hotel")]
        public List<Hotel> Hotel { get; set; }
    }
}

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


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

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

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