c#xmldocument加载访问冲突

时间:2013-02-27 07:43:58

标签: c# xml winforms visual-studio code-behind

我正在尝试从Windows窗体应用程序后面的代码中加载c#中的xml文件。这是我使用的代码:

        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);
        }

当我运行调试程序时,我没有错误。该程序开始就像应该几秒钟。然后它崩溃并完成调试。 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>

2 个答案:

答案 0 :(得分:1)

好的,这真是个错误。发生错误是因为xpath错误:

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

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

通过这样循环,我们尝试使用obj["objectname"].InnerText来访问<objectname>John</objectname>的“objectname”子项。

解决这个问题的方法很简单:

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

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

通过删除/ *我们将<object>定义为xmlNode对象。

因此创建了访问冲突因为孩子,我们想要读出innerText,从未存在过。希望这可以帮助某人。

答案 1 :(得分:0)

确保您没有在代码中保留引用。 以防您尝试打开已锁定的文件。 否则,只需尝试“清理解决方案”,然后在Visual Studio中“重建”,然后再试一次。