0

美好的一天,我正在创建一个应用圣经,我在搜索经文(“v”)时遇到了麻烦。我已经创建了整个结构可以过滤书(“b”),然后它加载所有章节的列表(“c”),当你选择一个章节时,它会创建一个列表并加载所有的诗句。现在我想整理一个代码,以便当用户单击列表编号时,会显示这节经文的文本。

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;
    }
4

1 回答 1

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将在 中返回字符串(v节点内的项目)的集合Versiculo,然后将它们打印出来并由,.

使它没有返回结果的原因是你得到了第一个匹配的v节点,然后试图把v它的子节点作为结果。

于 2013-05-04T16:02:37.160 回答