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

更新的代码仍然有问题。它只显示一个电影名称而不是所有电影名称。

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

谁能告诉我我的问题在哪里?

另一个问题:有人可以告诉我如何按电影名称的字母顺序组织数据吗?

4

2 回答 2

1

检查您的 xml 文件 - 它可能有一个 Bite order 标记。在十六进制编辑器中打开文件并从文件开头删除非打印字符。

由于您的 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 回答
0

我的心理调试能力告诉我这movieListXML可能是一个文件名,在这种情况下你想调用

//movieListXML = @"c:\xmlFile.xml";
doc.Load(movieListXML);

代替

//movieListXML = @"<MovieData><Movie></Movie></MovieData>";
doc.LoadXml(movieListXML);

它将实际的 XML 作为字符串

于 2013-10-08T20:24:49.963 回答