2013-02-27 92 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