2016-06-18 4 views
0

以下のコードを実行すると、以下のXMLのすべてのサービスが取得されます。XML内で別の要素を選択するWindows Phone

しかし、一つの要素の外側にあるサービスが、残りの部分があるがである。

私は1つのリストにあるように、すべてのサービスを必要とします。

XMLサービスの「1」は外側ですが、「1a」サービスは内部にあり、残りはここにあります。

1つのリスト内のすべてのサービスを選択するために、次のコードまたは追加コードを変更するにはどうすればよいですか?

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

答えて

0

この

  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(); 
サービス利用の両方のレベルを取得するには、この

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(); 

をお試しください

次のようにクエリ結果を列挙できます。

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

ありがとう、これは同じ結果をもたらします。それは1aだけでなく1も示しています。 –

+0

サービス1はより高いレベルにあり、サービス1Aは、両方のレベルを取得するコードを変更しました – jdweng

+0

もう一度見てください。あなたは今1(1Aではなく)を取得しています。1Aは1の子として隠れていて、矢印を押すことで開くことができます。 1〜14はヌルの他のサービスです。 – jdweng