2012-03-17 63 views
0

Bassicly我可以正确地将我的xml文件加载到列表视图中,但我希望用户能够点击列表视图中的项目以及他们显示的有关该项目不在列表视图中的信息,但是xml。
所以我想我可以加载一个XML,当用户点击该项目,并以某种方式获取信息,但它不显示标签上的任何东西。任何帮助将不胜感激thanx。在标签中显示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

什么“不能正常工作”是指?编译时间错误?运行时错误?什么都没发生?我没有检查代码,但在你的例子中,你从它们读取的值XmlTextReader不会去任何地方(reader.Read(); codelabel.Text =“s”;)。 – 2012-03-17 16:00:57

+0

它不显示任何东西,当我在列表视图上按项目,这就是为什么即时通讯问他们的方式,我可以让程序知道哪些项目即时通讯点击和打印标签上的子项目 – Hashey100 2012-03-17 16:04:25

回答

1

使用these extensions

写:

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行中的代码与返回item.Name行交换即可。

0

创建模仿您的文件中的数据的类。像:

public class Project 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
} 

然后,你会读你的XML文件,最终将成为一个列表。看看这个教程:

Simple XML Parsing

private List<Project> _projects; 

你会然后从列表中你的ListView添加数据。

foreach(Project proj in _projects) 
{ 
    listView1.Items.Add(proj.Name); 
} 

在你的ListView的SelectedIndexChanged您可以访问列表的适当指标,以显示正确的价值标签。

codeLabel.Text = _projects[listView1.FocusedItem.Index].Code; 
0

Value属性为test节点为空(它只包含子节点,没有文本)。
我认为你应该改变你的代码,从测试开始直到你阅读它的结束标签为止,积累文本(带有声明,你可以在MSDN上看到一个例子)。

作为替代(如果XML文件不是很大),你可以考虑使用LINQ to XML或仅仅是XmlDocument(它更容易阅读和你总是可以有任何节点的InnerXml)。举个例子,你可以看看这个article on CodeProject

要了解可以做什么来解析XML的简短列表,您可以阅读this article(我认为它不是很好,但至少它是一个...列表)。