2012-03-17 68 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(我認爲它不是很好,但至少它是一個...列表)。