Bassicly我可以正确地将我的xml文件加载到列表视图中,但我希望用户能够单击列表视图中的项目以及它们显示的信息,这些信息不是列表视图中的项目,而是xml。
所以我想我可以在用户点击项目时加载一个xml并以某种方式获取该信息,但它不会在标签上显示任何内容。任何帮助将不胜感激。
XML:
<?xml version = "1.0" encoding="utf-8"?>
<project>
<test>
<code>ss</code>
<name>test</name>
</test>
<test>
<code>ss1</code>
<name>test1</name>
</test>
</project>
代码:
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
namespace form
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
XmlTextReader reader = new XmlTextReader("XMLfile1.xml");
XmlNodeType type;
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "name")
{
reader.Read();
listView1.Items.Add(reader.Value);
}
}
}
reader.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader("XMLFile1.xml");
XmlNodeType type;
while (reader.Read())
{
type = reader.NodeType;
if (type == XmlNodeType.Element)
{
if (reader.Name == "test")
{
reader.Read();
codelabel.Text = "s";
}
}
}
}
private void groupBox2_Enter(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:1)
写:
protected string GetName(string code)
{
var item = XElement.Load("XMLfile1.xml").GetEnumerable("test", x =>
new
{
Code = x.Get("code", string.Empty),
Name = x.Get("name", string.Empty)
})
.FirstOrDefault(i => i.Code == code);
if(null != item)
return item.Name;
return "Item not found";
}
这将从文件中查找列表,检查每个列表,直到找到正确的代码,然后返回name
值。然后将该值放在您的控件中。如果我错误地按名称搜索,只需将FirstOrDefault行中的代码与return item.Name行交换。
答案 1 :(得分:0)
创建一个模仿文件中数据的类。像:
public class Project
{
public string Code { get; set; }
public string Name { get; set; }
}
然后,您将把XML文件读入最终成为List的内容。看一下本教程:
private List<Project> _projects;
然后,您可以将列表中的数据添加到ListView。
foreach(Project proj in _projects)
{
listView1.Items.Add(proj.Name);
}
在ListView SelectedIndexChanged中,您可以访问List的正确索引以显示标签的正确值。
codeLabel.Text = _projects[listView1.FocusedItem.Index].Code;
答案 2 :(得分:0)
Value
节点的test
属性为空(它只包含子节点,没有文本)。
我认为你应该改变你的代码来累积文本(带声明,你可以在MSDN上看到一个例子)从测试开始直到你读到它的结束标记。
作为替代方案(如果XML文件不大),您可以考虑使用LINQ to XML或仅使用XmlDocument(它更容易阅读,您可以始终拥有InnerXml任何节点)。例如,您可以查看此article on CodeProject。
有关您可以执行的解析XML的简短列表,您可以阅读this article(我认为这不是很好,但至少它是...列表)。