2013-05-04 72 views
0

美好的一天,我正在创建一个应用程序圣经,我无法搜索经文(“v”)。我创建了整个结构可以过滤图书(“b”),然后加载所有章节(“c”)的列表,当你选择一章时,它创建一个列表并加载所有的经文。现在我想编一个代码,以便当用户点击一个列表编号时,显示这节经文的内容。搜索结果xml,c# - Windows应用商店

XML

<?xml version="1.0" encoding="UTF-8"?> 
<bible> 
    <b n="Gênesis" indice="1"> 
    <c n="1"> 
     <v n="1">text text</v> 
     <v n="2">text text text</v> 
    </c> 
    <c n="2"> 
     <v n="1">text text</v> 
     <v n="2">text text text</v> 
    </c> 
    <b n="Êxodo" indice="2"> 
    <c n="1"> 
     <v n="1">text text</v> 
     <v n="2">text text text</v> 
    </c> 
    <c n="2"> 
     <v n="1">text text</v> 
     <v n="2">text text text</v> 
    </c> 
    </b> 
</bible> 

C#

private void listBoxTeste1_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     int selectedindex = listBoxTeste1.SelectedIndex; 

     //Carregar o arquivo xml 
     XDocument xdoc = XDocument.Load("biblia.xml"); 


     var players = from player in xdoc.Descendants("v") 
         where (string)player.Attribute("n") == selectedindex.ToString() 
         select new 
         { 
          Versiculo = (string)player.Element("v") 
         }; 

     //listBox2.ItemsSource = players; 
     nameInput.Text = nameInput.Text + "  " + players; 
    } 

回答

0

实际上,我对这个问题不太清楚,但由于代码中有一些错误,我想这就是你需要帮助的东西;

var players = from player in xdoc.Descendants("c") 
       where (string)player.Attribute("n") == 
        selectedindex.ToString(CultureInfo.InvariantCulture) 
       select new 
       { 
        Versiculo = player.Elements("v").Select(x => x.Value) 
       }; 

Console.WriteLine(String.Join(", ", players.First().Versiculo)); 

players将在Versiculo返回一个字符串的集合(该v节点里面的物品),只是打印出来的,加入。

让它返回没有结果的事情是,您得到第一个匹配的v节点,然后尝试取其v子节点作为结果。