Как использовать xml id для заполнения объекта класса? - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующее определение класса в C #:

class Supervisor
{
    public string Id { set; get; }
    public string Name { set; get; }
    public int Contracts { set; get; }
    public long Volume { set; get; }
    public int Average { get; }
}

У меня также есть этот XML-документ:

 <digital-sales xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <supervisor id="1236674">
        <Name>Hiroki</Name>
        <Contract>11</Contract>
        <Volume>1036253</Volume>
        <Average>94205</Average>
    </supervisor>
    <supervisor id="123459">
        <Name>Ayumi</Name>
        <Contract>5</Contract>
        <Volume>626038</Volume>
        <Average>125208</Average>
    </supervisor> ...
 </digital-sales>

Внутри основного я создаю объект для каждого супервизора и заполняю его данные поиском по идентификатору. Однако я всегда получаю нулевое значение в результате. Это мой основной метод:

    static void Main(string[] args)
    {

        // load the document
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load(@"C:\Users\Hideki\ShinDeta.xml");


        Supervisor ayumi = new Supervisor();

  // this line return null 
        XmlNode ayumiNode = xmlDoc.GetElementById("1236674");

      //     ayumi.Id = (supply expression here);
     //      ayumi.Name = (supply expression here);
    //       ayumi.Contracts = (supply expression here);
   //        ayumi.Volume = (supply expression here);
  //         ayumi.Average = (supply expression here);

    }

Может кто-нибудь указать мне кратчайший путь для достижения этого? Нет синтаксиса linq, пожалуйста, я не знаком с ним вообще.

1 Ответ

0 голосов
/ 08 января 2019

Вы можете использовать XML-сериализацию , чтобы выполнить это. Вот пример

    [XmlType("supervisor")]
    public class Supervisor
    {
        [XmlAttribute("id")]
        public string Id { set; get; }

        public string Name { set; get; }

        [XmlElement("Contract")]
        public int Contracts { set; get; }

        public long Volume { set; get; }

        public int Average { set; get; }
    }

        static void Main(string[] args)
        {
            try
            {
                XmlSerializer xs = new XmlSerializer(typeof(List<Supervisor>), new XmlRootAttribute("digital-sales"));
                using (FileStream fileStream = new FileStream(@"C:\temp\ShinDeta.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    var supervisors = xs.Deserialize(fileStream) as List<Supervisor>;
                    foreach (Supervisor supervisor in supervisors)
                    {
                        Debug.WriteLine($"Id: {supervisor.Id}, Name: {supervisor.Name}");
                    }
                }
            }
            catch(Exception e)
            {
                Debug.WriteLine(e.Message);
            }           
        }

Это выводит:

Id: 1236674, Name: Hiroki
Id: 123459, Name: Ayumi
...