2016-06-18 12 views
0

Ich habe es geschafft, das Folgende zum Laufen zu bringen, das bekommt alle Dienste in der XML unten.Wählen Sie ein anderes Element in XML Windows Phone

Aber es gibt einen Service, der außerhalb der Elemente ist, aber der Rest sind in.

ich alle Dienste müssen in einer Liste.

Wie Sie aus dem XML-Service sehen können, ist '1' draußen, während der '1a' Dienst innen ist und der Rest hier ist.

Wie kann ich den folgenden Code oder zusätzlichen Code ändern, um alle Dienste in einer Liste auszuwählen?

var routeNames = (from n in doc.Descendants(ns + "ArrayOfService 
        select new RootContainer 
          { 
          Stops = (from s in n.Elements(ns + "Service").Elements(ns + "client").Elements(ns + "services").Elements(ns + "Service") 

             select new Stops 

             { 

              NaptanCode = s.Element(ns + "serviceDescription").Value, 
              StopName = "/Images/Services/" + s.Element(ns + "serviceName").Value + ".png", 
              StopId = s.Element(ns + "serviceId").Value 
             }).ToList() 
          }).Single(); 


     listServices.ItemsSource = routeNames.Stops; 

xml: <ArrayOfService xmlns="http://schemas.datacontract.org/2004/07/BusExpress.ClassLibrary" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Service z:Id="i1" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"> <client z:Id="i3"> <services>
<Service z:Id="i5"> <serviceDescription>Whitehawk - County Hospital - City Centre - Hove - Portslade - Mile Oak</serviceDescription> <serviceName>1A</serviceName> <serviceText>Whitehawk - Mile Oak</serviceText> </Service> </services> </client> <serviceDescription>Whitehawk - County Hospital - City Centre - Hove - Portslade - Mile Oak</serviceDescription> <serviceName>1</serviceName> </Service> </ArrayOfService>

enter image description here

Antwort

0

Versuchen Sie, diese

var routeNames = doc.Descendants(ns + "client").FirstOrDefault().Descendants(ns + "Service").Select(s => new { 
        NaptanCode = s.Element(ns + "serviceDescription").Value, 
        StopName = "/Images/Services/" + s.Element(ns + "serviceName").Value + ".png", 
        StopId = s.Element(ns + "serviceId").Value 
       }).ToList(); 

diese

  var routeNames = doc.Descendants(ns + "ArrayOfService").FirstOrDefault().Elements(ns + "Service").Select(x => new { 
       serviceDescription = (string)x.Element(ns + "serviceDescription"), 
       serviceName = (string)x.Element(ns + "serviceName"), 
       services = x.Descendants(ns + "Service").Select(s => new { 
        NaptanCode = s.Element(ns + "serviceDescription").Value, 
        StopName = "/Images/Services/" + s.Element(ns + "serviceName").Value + ".png", 
        StopId = s.Element(ns + "serviceId").Value 
       }).ToList() 
      }).ToList(); 
sowohl Serviceniveau Nutzung zu erhalten

Sie können durch Abfrage Ergebnisse mit folgenden

foreach (var parentService in routeNames) 
{ 
    foreach (var childService in parentService.services) 
    { 
    } 
} 
+0

aufzählen Dank Dies führt immer noch das gleiche Ergebnis. Es zeigt nur 1a und nicht 1. –

+0

Service 1 ist auf einem höheren Niveau als Service 1A, ich habe Code geändert, um beide Ebenen zu bekommen – jdweng

+0

Schau nochmal. Du erhältst jetzt 1 (nicht 1A). Der 1A ist als Kind von 1 versteckt und kann durch Drücken des Pfeils geöffnet werden. 1 bis 14 sind andere Dienste, die null sind. – jdweng