2012-04-04 15 views
0

銀色のXMLファイルから国名と都市をロードしようとしています。このXMLファイルをWP7でどのように読むことができますか?

選択した国に応じてListPickerに都市をロードします。

これは私のXMLファイルの一部です:

<Times> 
    <country name="USA"> 
     <city name="Aaronsburg -- PA"> 
      <state>PA</state> 
      <latitude>408739</latitude> 
      <longitude>-773815</longitude> 
      <timezone>-500</timezone> 
      <daylight>1</daylight> 
     </city> 
     <city name="Abbeville -- AL"> 
      <state>AL</state> 
      <latitude>316077</latitude> 
      <longitude>-853051</longitude> 
      <timezone>-600</timezone> 
      <daylight>1</daylight> 
     </city> 
     <city name="Abbeville -- GA"> 
      <state>GA</state> 
      <latitude>319710</latitude> 
      <longitude>-833016</longitude> 
      <timezone>-500</timezone> 
      <daylight>1</daylight> 
     </city> 
     <city name="Abbot -- ME"> 
      <state>ME</state> 
      <latitude>453219</latitude> 
      <longitude>-695342</longitude> 
      <timezone>-500</timezone> 
      <daylight>1</daylight> 
      </city> 
........ 
........ 

と、このコードは、私が書いた:

private void LoadButton_Click(object sender, RoutedEventArgs e) 
{ 
    XDocument doc = XDocument.Load("Athan.xml"); 
    var definitions = doc.Document.Descendants(XName.Get("country")); 

    foreach (var definition in definitions) 
    { 
     if (definition.Attribute(XName.Get("name")).Value == CountryListPicker.SelectedItem.ToString()) 
     { 
      var cities = definition.Document.Descendants(XName.Get("city")); 

      foreach (var city in cities) 
      { 
       CityListPicker.Items.Add(city.Attribute(XName.Get("name")).Value.ToString()); 
      } 

      return; 
     } 
    } 
} 

都市は、長い時間の後にロード、またはロードされていません! 私のコードに何か問題がありますか?

答えて

0

私はwindows-phone-7について何も知らないので、ここでは完全に外れているかもしれませんが、私はあなたのLoadButton_Clickメソッドの中核がLinq to Xmlであると仮定しています。

この場合、.Documentへの呼び出しとXNameへの頻繁な呼び出しについては何か不思議です。たとえば、定義のコードは、おそらく "var definitions = doc.Descendants(" country ");のような単純なものになる可能性があります。 "var cities"の場合も同様です。

属性を扱う場合、 "CityListPicker.Items.Add(city.Attribute(" name "))などの値を取得できます。

データは少なくとも一部は読み込まれているため、名前空間の問題はないと見なしますが、確認する必要があります。

これが役に立ちます。

+0

...

XDocument doc = XDocument.Load("Athan.xml"); XElement root = doc.Root; foreach (XElement el in root.Descendants("Times")) { // code to navigate in your XML if (el.Name == "country"){ foreach (XAttribute attr in el.Attributes()) { if (attr.name == "name"){ // receive your country name String CountryName = attr.Value; } } foreach (XElement city in el.Descendants()) { if (city.Name == "city") { Object City = new Object(); // create your object... foreach (XAttribute attr in el.Attributes()) { if (attr.name == "state"){ City.sate = cityAttr.Value; } if (attr.name == "latitude"){ City.latitude = cityAttr.Value; } // etc.... } //You add your object city in list (for example) ... } } 

私は、XMLをロードするために問題を抱えているし、この方法では、XMLがロードされたを追加するためのおかげで試してみてくださいヘルプ 私はsystem.xml.linqを使用しています、 私はコードがメモリにすべてのデータを持ち込むと思います。私は、メモリに完全にロードせずにxmlファイルを読む方法があると思います。ありがとう –

+0

ファイルをメモリにロードする際に問題がある場合は、おそらくこのリンクが役に立ちます:http://stackoverflow.com/questions/5838657/how-can-i-use-linq-to-xml-to-query-huge -xml-files-with-reasonable-memory-consump – Steve

0

・ホープ、このソリューションのヘルプあなた...

関連する問題