-2

リストボックスに投稿するために、xml ファイルのノードからデータを読み込もうとしています。私のxmlファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<MovieData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Movie>
    <Name>Death Race</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
  </Movie>
  <Movie>
    <Name>Death Race 2</Name>
    <Type>Action</Type>
    <Type>Adventure</Type>
    <Rating>R</Rating>
    <Disk>Blu-Ray</Disk>
  </Movie>
</MovieData>

これが私がやろうとしていることです。

try
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(movieListXML);
        XmlNodeList nodeList = doc.SelectNodes("/MovieData[@*]");
        foreach (XmlNode xn in nodeList)
        {
            XmlNode movie = xn.SelectSingleNode("Movie");
            if (movie != null)
            {
                movieTypeListBox.Items.Add(movie["Name"].InnerText);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

更新されたコードにはまだ問題があります。すべての映画名ではなく、1 つの映画名のみが表示されます。

try
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(movieListXML);
        XmlNodeList nodeList = doc.SelectNodes("/MovieData");
        foreach (XmlNode xn in nodeList)
        {
            XmlNode movie = xn.SelectSingleNode("Movie");
            if (movie != null)
            {
                movieTypeListBox.Items.Add(movie["Name"].InnerText);
            }
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

誰でも私の問題がどこにあるのか教えてもらえますか?

別の質問: Movie の名前でデータをアルファベット順に整理する方法を教えてもらえますか?

4

2 に答える 2

1

xml ファイルを確認してください - おそらく Bite オーダー マーカーが含まれています。16 進エディタでファイルを開き、ファイルの先頭から印刷されていない文字を削除します。

あなたのxmlは問題ないように見えます-特にxml宣言-これがあなたの問題になると確信しています。

ファイルが作成されたときに使用された文字エンコーディングに応じて、次のようになります: 0xFEFF (utf-8 の場合 - リトルエンディアンだと思います)

すべての映画名を取得する方法は次のとおりです。

           XmlNodeList nodeList = doc.SelectNodes("/MovieData/Movie");
            foreach (XmlNode xn in nodeList)
            {
                    Console.WriteLine(xn["Name"].InnerText);
            }

それらも並べ替えたい場合は、おそらく XDocument の方が簡単です。

于 2013-10-08T20:21:38.883 に答える