Как перебрать данные из XMLElement, используя foreach в C # - PullRequest
0 голосов
/ 12 октября 2019

Я хочу перебрать данные из XMLElement. В списке у меня есть 10 строк записей. каждая строка снова содержит список значений. В строке каждое значение необходимо сохранить в тип somString.

Ниже приведен XMLElement, получаемый из List

<ROW id="1">
   <D n="6721">10128</D>
   <D n="6724">CL</D>
   <D n="6771">*</D>
   <D n="6773">ACT</D>
   <D n="6774">PHON</D>
   <D n="6775">04-MAR-2018 21:54</D>
   <D n="6779">MEP-IU</D>
   <D n="6780">MEP-IU-010</D>
   <D n="6782">CWP2B19-113</D>
   <D n="6792">11410</D>
   <D n="6809"/>
   <D n="6880"/>
   <D n="11651">Tap is not working in the Back of the Apt  
                Name: Alex 
                Contact : 971-566826978</D>
   <D n="100410">40977</D>
   <D n="101312">AHMED.ALI@MERAAS.AE</D>
   <D n="101313">HANDOVER</D>
 </ROW>

Я попробовал этот код, потому что пытался перебирать данные, но я получаю только 1-й элемент, а не оставшиеся элементы:

for (int i = 0; i < nodeList.Count; i++)
{
    if (nodeList[i].InnerText.Length > 0)
    {
        string name =(string) i.FirstChild.Value;                     
        MessageBox.Show(nodeList[i].InnerText);
    }
}

Но я получаю только значение полевого столбца .. как получить оставшиеся данные из XMLElement.

В списке у меня есть 10 строк записей. каждая строка снова содержит список значений. В строке каждое значение необходимо сохранить в тип somString.

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

Пожалуйста, ознакомьтесь с примером для этого.

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

using (WebResponse response = httpWebRequest.GetResponse ()) {using (StreamReader streamreader = new StreamReader (response.GetResponseStream ())) {строка result1 = streamreader.ReadToEnd ();MessageBox.Show (result1);

                xmlDocument = new XmlDocument();
                xmlDocument.LoadXml(result1);
                XmlNodeList nodeList;

                if (xmlDocument.DocumentElement.Attributes["xmlns:soapenv"] != null)
                {
                    string xmlns = xmlDocument.DocumentElement.Attributes["xmlns:soapenv"].Value;
                    XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDocument.NameTable);

                    nsmgr.AddNamespace("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
                    nsmgr.AddNamespace("df", "http://schemas.datastream.net/MP_functions/MP0118_GetGridHeaderData_001_Result");


                    nodeList = xmlDocument.SelectNodes("/soapenv:Envelope/soapenv:Body/df:MP0118_GetGridHeaderData_001_Result/df:GRIDRESULT/df:GRID/df:DATA/df:ROW[*]", nsmgr);
                }
                else
                {
                    nodeList = xmlDocument.SelectNodes("/soapenv:Envelope/soapenv:Body/df:MP0118_GetGridHeaderData_001_Result/df:GRIDRESULT/df:GRID/df:DATA/df:ROW[*]");
                }


                for (int i = 0; i < nodeList.Count; i++)
                {
                    if (nodeList[i].InnerText.Length > 0)
                    {




                        String ctr_code = nodeList[i].ChildNodes[0].InnerText;
                        String ctr_status = nodeList[i].ChildNodes[1].InnerText;
                        String ctr_org = nodeList[i].ChildNodes[2].InnerText;
                        String ctr_type = nodeList[i].ChildNodes[3].InnerText;
                        String ctr_contactsource = nodeList[i].ChildNodes[4].InnerText;
                        String ctr_created = nodeList[i].ChildNodes[5].InnerText;
                        String ctr_servicecategory = nodeList[i].ChildNodes[6].InnerText;
                        String ctr_serviceproblem = nodeList[i].ChildNodes[7].InnerText;
                        String ctr_object = nodeList[i].ChildNodes[8].InnerText;
                        String ctr_contactinfoid = nodeList[i].ChildNodes[9].InnerText;
                        String ctr_contactnote = nodeList[i].ChildNodes[10].InnerText;
                        String ctr_desc = nodeList[i].ChildNodes[11].InnerText;
                        String ctr_note = nodeList[i].ChildNodes[12].InnerText;
                        String ctr_event = nodeList[i].ChildNodes[13].InnerText;
                        String ctr_createdby = nodeList[i].ChildNodes[14].InnerText;
                        String ctr_mrc = nodeList[i].ChildNodes[15].InnerText;






                    }
                }               

            }
        }
    }
0 голосов
/ 13 октября 2019

Вот способ быстрый и грязный , чтобы получить значения, это можно улучшить, удалив жестко запрограммированные значения и проверив объекты перед тем, как получить к ним доступ.

РЕДАКТИРОВАТЬ: XML структура из здесь .

            using (var stream = new StreamReader("Response.xml"))
            {
                XDocument doc = XDocument.Load(stream);

                var nodes = doc.Elements().Descendants()
                    .Where(x => x.Name == XName.Get("ROW", "http://schemas.datastream.net/MP_functions/MP0118_GetGridHeaderData_001_Result"));

                foreach (var node in nodes)
                {
                    if (node.FirstAttribute != null)
                    {
                        var firstAttribute = node.FirstAttribute;
                        Console.WriteLine($"{firstAttribute.Name.LocalName} - {firstAttribute.Value}");

                        var children = node.Descendants();
                        if (children.Count() > 0)
                        {
                            foreach (var child in children)
                            {
                                Console.WriteLine($"{child.FirstAttribute.Value}:{child.Value}");
                            }
                        }
                        Console.WriteLine("----------------------------------");
                    }
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...