Десериализовать xml-файл или разобрать, используя linq to xml - PullRequest
0 голосов
/ 15 октября 2018

Упрощенный XML-файл, который мне нужно декодировать:

    <?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:deliverylistResponse xmlns:ns2="http://tdriverap3.wsbeans.iseries/">
         <return>
            <COUNT>3</COUNT>
            <DELIVERIES>
               <ADD1>1300 address 1</ADD1>
               <CITY>NICE CITY</CITY>
               <ZIP>85705</ZIP>
            </DELIVERIES>
            <DELIVERIES>
               <ADD1>40 S PINAL PKWY AVE</ADD1>
               <CITY>FLORENCE</CITY>
               <ZIP>85132</ZIP>
            </DELIVERIES>
            <DELIVERIES>
               <ADD1>1825 EAST MAIN</ADD1>
               <CITY>CHANDLER</CITY>
               <ZIP>85286</ZIP>
            </DELIVERIES>
            <ERRORCODE/>
            <RUNDATE>09/26/2018</RUNDATE>
         </return>
      </ns2:deliverylistResponse>
   </soap:Body>
</soap:Envelope>

Я использую следующее, чтобы попытаться декодировать каждый из отдельных адресов в коде.

Я не могу понять, какполучить к ним доступ.

XElement xelement = XElement.Load(@"e:\test\X2.xml");
        IEnumerable<XElement> addresses = xelement.Elements();

        foreach (var address in addresses)
        {
            Console.WriteLine(address);
            Console.WriteLine(address.Element("CITY").Value);

        }

Первый писатель работает (выводит все дерево XML), второй говорит: «System.Xml.Linq.XContainer.Element (...) возвратил ноль» - я пыталсяиспользуя DELIVERIES, COUNT, Body и т. д. *

Очевидно, что я не говорю правильно, как пройти через структуру, но я не знаю, как дальше с ней ..

ОБНОВЛЕНИЕ: Благодаря некоторой помощи я понял, как это сделать с помощью Linq.Я все еще хотел бы иметь возможность десериализовать его, если у кого-то есть указатель.Я следовал нескольким учебникам, но несколько уровней этого XML, кажется, отбрасывают меня.

Я создал класс для хранения данных, но это насколько мой успех с этим путем пошел.

Спасибо, Джо

1 Ответ

0 голосов
/ 16 октября 2018

Спасибо, Crowcoder - это то, чем я завелась, которая будет работать.Однако настоящий XML-файл содержит около 60 полей, так что это не так хорошо, как использование процедуры десериализации, но я могу, по крайней мере, двигаться вперед с проектом.

XElement xelement = XElement.Load(@"e:\test\x2.xml");

            IEnumerable<XElement> textSegs =
                 from seg in xelement.Descendants("DELIVERIES")
                  select seg;

            foreach (var address in textSegs)
            {
                Console.WriteLine(address.Element("ADD1").Value);
                Console.WriteLine(address.Element("CITY").Value);
                Console.WriteLine(address.Element("ZIP").Value);

            }


            Console.ReadKey();
...