2013-02-27 93 views
0

我想從c#中加載一個xml文件在windows窗體應用程序的代碼後面。這是我使用的代碼:c#xmldocument加載訪問衝突

 XmlDocument xdoc = new XmlDocument(); 
     xdoc.Load("file.xml"); 

     foreach (XmlNode obj in xdoc.SelectNodes("/enabledobjects/object/*")) 
     { 
      RadListDataItem item = new RadListDataItem(); 

      item.Text = obj["objectname"].InnerText; 
      item.Value = obj["value"].InnerText; 

      DropDownList.Items.Add(item); 
     } 

當我運行調試程序,我gent沒有錯誤。程序開始時應該持續幾秒鐘。然後它崩潰並完成調試。 Visual Studio顯示以下消息:

The program '[6728] Daten Archivar.vshost.exe: Managed (v4.0.30319)' has exited with code -1073741819 (0xc0000005) 'Access violation'. 

我擁有完全的管理員權限。該文件保存在相同的exe文件保存爲每個人的完全訪問權限。我不知道爲什麼我無法訪問它。

的xml文件看起來是這樣的:

<?xml version="1.0" encoding="utf-8" ?> 
<enabledobjects> 
    <object> 
     <objectname>John</objectname> 
     <value>Carter</value> 
    </object> 
</enabledobjects> 
+0

您是否嘗試過使用VS調試器來調試代碼?設置斷點並逐步完成。看來你正在訪問一個沒有正確初始化的對象,如果有的話...... – 2013-02-27 07:49:35

+0

是不是DropDownList的類名? ...不應該是像dropDownList1.Items.Add ... – user1452962 2013-02-27 07:50:56

+0

當我一步一步通過它,它崩潰在 item.Text = obj [「objectname」]。InnerText; 但obj被正確填充而不爲空。問題不能成爲item.Text,因爲當我用item.Text =「」;程序工作 – colosso 2013-02-27 08:01:10

回答

1

好吧,這真是一個嚴重的錯誤。錯誤occures因爲XPath的是錯誤的:通過循環這樣

foreach (XmlNode obj in xdoc.SelectNodes("/enabledobjects/object/*")) 
    { 

    RadListDataItem item = new RadListDataItem(); 
    item.Text = obj["objectname"].InnerText; 

,我們與obj["objectname"].InnerText嘗試訪問的<objectname>John</objectname>的「對象名」的孩子。

解決這個問題是很容易:

foreach (XmlNode obj in xdoc.SelectNodes("/enabledobjects/object")) 
    { 

    RadListDataItem item = new RadListDataItem(); 
    item.Text = obj["objectname"].InnerText; 

通過移除/ *我們定義<object>作爲XMLNode對象。

因此,創建訪問衝突是因爲孩子,我們想讀出innerText,從不存在。希望這可以幫助某人。

0

確保你不持有引用鬆在你的代碼。 以防萬一您試圖打開已鎖定的文件。 否則,只需嘗試「清潔解決方案」,然後在Visual Studio中重新構建,然後重試。

+1

我不認爲'XmlDocument'實現'IDisposable' – 2013-02-27 08:00:38

+0

你是對的安迪,我的錯,我會更新代碼。 – 2013-02-27 08:06:04