2013-12-08 51 views
0

所以我有這樣的代碼,它應該讓我的xml文件在選擇前一個元素後讀出每個後代元素的屬性。下面是我使用的XML -從孩子的派生中獲得atrributes

<?xml version="1.0" encoding="utf-8" ?> 
<adventures> 
    <adventure_path Name ="Adventure Path 1"> 
    <adventure Name ="Adventure 1"> 
     <senario Name ="Senario 1"> 
     <location Name="Location 1" Players="1"/> 
     <location Name="Location 2" Players="1"/> 
     </scenario> 
     <senario Name ="Senario 2"> 
     <location Name="Location 3" Players="1"/> 
     <location Name="Location 4" Players="1"/> 
     </scenario> 
    </adventure> 
    <adventure Name="Addventure 2"> 
     <senario Name ="Senario 3"> 
     <location Name="Location 5" Players="1"/> 
     <location Name="Location 6" Players="1"/> 
     </scenario> 
    </adventure> 
    </adventure_path> 
    <adventure_path Name ="Adventure Path 2"> 
    <adventure Name ="Adventure 3"> 
     <senario Name ="Senario 4"> 
     <location Name="Location 7" Players="1"/> 
     <location Name="Location 8" Players="1"/> 
     </scenario> 
     <senario Name ="Senario 5"> 
     <location Name="Location 9" Players="1"/> 
     <location Name="Location 10" Players="1"/> 
     </scenario> 
    </adventure> 
    </adventure_path> 
</adventures> 

所以基本上應該發生什麼程序列出ListBox1中所有的探險路徑,我選擇一個所述的冒險路徑。該程序列出了所選冒險道路內的所有冒險,我選擇了一個冒險道路。最後,程序列出了所選冒險中的所有場景。目前發生的事情是它會完美地完成前兩個列表,但是當我在第二個列表中選擇冒險時,我似乎無法讓它列出任何場景。它不會崩潰,只是不列出它們。任何幫助都會很棒,這是我的代碼,用於制定所有場景列表。

private void lst_Adventures_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    string selectedItem = lst_Adventure.SelectedItem.ToString(); 
    string selectedAdventure = lst_Adventures.SelectedItem.ToString(); 

    lst_Senarios.Items.Clear(); 

    System.Console.WriteLine(selectedItem); 

    XDocument doc = new XDocument(); 

    doc = XDocument.Load("D:\\WpfApplication1\\WpfApplication1\\Adventures.xml"); 

    XElement selectedElement = doc.Descendants().Where(x => (string)x.Attribute("Name") == selectedItem).FirstOrDefault(); 
    XElement selectedAdventures = selectedElement.Descendants().Where(x => (string)x.Attribute("Name") == selectedItem).FirstOrDefault(); 

    if (selectedAdventures != null) 
    { 
     foreach (var docs in selectedAdventures.Elements("senario")) 
     { 
      string AdventuresPathName = docs.Attribute("Name").Value; 
      lst_Adventures.Items.Add(AdventuresPathName); 
     } 
    } 
} 
+0

我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

哦,對不起,我是本網站的新用戶 – GiantDwarf

+0

每頁頂部都有一個非常棒的「幫助」按鈕。 –

回答

0

我剛剛試過你提供的xml代碼,我注意到了一些缺陷。當這些得到糾正你的代碼將按照預期運行(如果我不誤解你所期望的):

  1. 打開標籤爲senario犯規匹配的結束標記scenario。如果您將開始標記更改爲scenario,請不要忘記在foreach中將「senario」更改爲「scenario」。
  2. selectedAdventures應該對selectedAdventure,而不是將selectedItem匹配(如果我不誤會的變量)
+0

所以這項工作與否? – har07