2013-03-13 19 views
0

讀取XML文檔,我有一個名爲sms.xml XML文檔存儲數據是這樣的:使用列表框

<sms address="+995555777777" time="Mar 12, 2013 5:08:09 PM" date="1363093689732" type="2" body="blah blah blah? :D" read="1" service_center="" name="name surname" /> 

這是一個短信,我有超過1000條短信,所以我要加載它們在列表框中按名稱或地址(它並不重要),當我點擊其中一個我想顯示選定的短信的身體。這是我的代碼:

XmlDocument xmlDoc = new XmlDocument(); 

    public void loadXML() 
    { 
     xmlDoc.Load("sms.xml"); 

     XmlNodeList smss = xmlDoc.SelectNodes("//sms"); 

     foreach (XmlNode sms in smss) 
     { 
      listBox1.Items.Add(sms.Attributes["address"].Value); 
     } 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     loadXML(); 
    } 

    private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     XmlNode node = xmlDoc.SelectSingleNode(string.Format("sms[@name='{0}']", listBox1.SelectedItem)); 

     txtName.Text = node.Attributes["body"].Value; 

    } 

並返回錯誤:「對象引用不設置到對象的實例」在txtName.text行上。你能幫我嗎?

p.s.對不起我的英語不好。

+0

您將它們添加到地址框中,然後使用名稱的xpath屬性選擇器。將@名稱更改爲@地址並查看您獲得的信息。 – 2013-03-13 19:10:00

+0

沒有什麼變化 – samuraisxmali 2013-03-13 19:17:27

回答

1

它可能是一個語法問題,請嘗試以下操作:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    XmlNode node = xmlDoc.SelectSingleNode(string.Format("//sms[@name='{0}']", listBox1.SelectedItem)); 
    txtName.Text = node.Attributes["body"].Value; 
} 

注意的領先//

+0

:aaaaaaaaaaaaa:我討厭這樣的字符時,所有的代碼都會失敗。謝謝你,現在它工作。 – samuraisxmali 2013-03-13 19:32:38

+0

有一個問題:從一個發件人它每次顯示相同的消息,而不是真正的消息文本正文當列表框中的列表按名稱顯示,但是當我用時間顯示它時,一切正常。有沒有辦法按名稱來工作? – samuraisxmali 2013-03-13 19:37:19

+0

我不確定我是否理解這個問題。你可以嘗試重新措辭嗎? – alan 2013-03-13 20:20:53