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

playersvは文字列 (ノード内のアイテム) のコレクションを に返し、Versiculoそれらを で結合して出力するだけ,です。

結果が返されなかったのは、最初に一致するノードを取得し、そのサブノードを結果としてv取得しようとしたためです。v

于 2013-05-04T16:02:37.160 に答える