我正在尝试从我的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);
}
谁能告诉我我的问题在哪里?
另一个问题:有人可以告诉我如何按照电影名称的字母顺序组织数据吗?
答案 0 :(得分:1)
检查你的xml文件 - 它可能有一个Bite命令标记。在十六进制编辑器中打开文件,并从文件的开头删除非打印字符。
由于你的xml看起来很好 - 特别是xml声明 - 我很确定这将是你的问题。
取决于文件创建时使用的字符编码,它会像:0xFEFF(如果它的utf-8 - 认为那些小端)
以下是如何获取所有电影名称:
XmlNodeList nodeList = doc.SelectNodes("/MovieData/Movie");
foreach (XmlNode xn in nodeList)
{
Console.WriteLine(xn["Name"].InnerText);
}
如果你想对它们进行排序,那么它可能更容易进行XDocument。
答案 1 :(得分:0)
我的通灵调试能力告诉我movieListXML
可能是一个文件名,在这种情况下你要打电话
//movieListXML = @"c:\xmlFile.xml";
doc.Load(movieListXML);
而不是
//movieListXML = @"<MovieData><Movie></Movie></MovieData>";
doc.LoadXml(movieListXML);
将实际的XML作为字符串