c# WinForms -从XML中导入数据到列表框
本文关键字:数据 列表 导入 WinForms XML | 更新日期: 2023-09-27 18:17:41
XML代码
-<RegionBox>
<Regions>fdzg</Regions>
<Regions>asgfasd</Regions>
<Regions>sdfadga</Regions>
<Regions>adsfgsfha</Regions>
</RegionBox>
如何保存XML
XElement element = new XElement("RegionBox");
foreach (var item in listBox1.Items)
{
element.Add(new XElement("Regions", item));
//DataRow listRow = ds.Tables["RegionBox"].NewRow();
//listRow["List"] = listBox1.Items;
//Console.WriteLine(item);
}
XDocument document = new XDocument();
document.Add(element);
document.Save("XMLFile2.xml");
我希望能够将数据导入到列表框中目前我已经尝试了
ds.ReadXml("XMLFile2.xml");
{
for (int i = 0; i < ds.Tables["RegionBox"].Columns.Count; i++)
listBox1.Items.Add(ds.Tables["Regions"].Rows[0][i].ToString());
setImage.BackgroundImage = System.Drawing.Image.FromFile(filePath.Text);
}
和
XDocument xmlDoc = XDocument.Load("XMLFile2.xml");
var items = (from i in xmlDoc.Descendants("Regions")
select new { Item = i.Element("Regions").Value }).ToList();
listBox1.DataSource = items;
但是我似乎无法让它导入信息…虽然我已经成功地获得了第一项或最后一项,但只有一项而不是所有的项可以导入
谢谢
更新::就在发布这篇文章之后,我发现我继续搜索,然后找到了一个工作
XElement element = XElement.Load("XMLFile2.xml");
foreach (XElement item in element.Elements("Regions"))
listBox1.Items.Add(item.Value);
-
select new { Item = i.Element("Regions").Value })
是错误的,因为参数i
已经是Regions
的元素,所以您只需要更改代码,如select new { Item = i.Value })
- 我不知道你是否设置了
DisplayMember
,也许你应该添加这个代码listBox1.DisplayMember = "Item";
不知道这是否有多大意义,但是关于读取xml数据然后显示它-
XmlTextReader xReader = new XmlTextReader("../../Products.xml");
xReader.WhitespaceHandling = WhitespaceHandling.None;
XmlDocument xDoc = new XmlDocument();
xDoc.Load(xReader);
Console.WriteLine("Please enter product...");
string product = Console.ReadLine();
XmlNodeList xNodeList = xDoc.DocumentElement.SelectNodes("//Products/Product");
foreach (XmlNode xNode in xNodeList)
{
if (xNode.NodeType == XmlNodeType.Element)
{
// Console.WriteLine(xNode.NodeType.ToString() + " : " + xNode.Name + " =" + xNode.FirstChild.InnerText);
if (xNode.FirstChild.InnerText == product)
{
string name = xNode.FirstChild.InnerText;
string price = xNode.FirstChild.NextSibling.InnerText;
Console.WriteLine("Name: " + name + "... Price: R" + price);
}
else
{
Console.WriteLine("No Price");
}
}
}
Console.ReadLine();
XML文件为Products.xml -
<Products>
<Product>
<name>Bread</name>
<price>10</price>
</Product>
<Product>
<name>Milk</name>
<price>20</price>
</Product>
<Product>
<name>Coke</name>
<price>18</price>
</Product>
<Product>
<name>BarOne</name>
<price>7</price>
</Product>
一些解释:
XmlTextReader只能在你添加using System.Xml;命名空间,一旦你初始化一个XmlTextReader (xReader),你可以用一个。xml文件加载它,我的是Products.xml,它是从调试文件夹中找到2个文件夹,因此("../../")-跳过两个文件夹,这实际上是根文件夹,但2个文件夹的"调试"文件夹。
xmlNodeList选择节点,我在这里所做的是只选择到Product,所以下一个节点是name,之后的兄弟节点是price。
我相信foreach循环是不言自明的,第一个if语句确保节点是一个元素,第二个if语句检查产品名称(面包、牛奶等)是否与用户在开始时输入的名称匹配。如果是这样,那么一个字符串就会生成,并命名为"name",因为第一个子元素是名字,我们想要名字的节点值,所以innerText会为我们获取那个。
要获得价格,我们只需写入xNode.FirstChild.NextSibling。InnerText,这将从第一个节点移动到下一个节点,这是我们想要的。
希望这有帮助?