0

我正在尝试在 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);
        }

当我运行调试程序时,我没有错误。程序按应有的方式启动了几秒钟。然后它carashes并完成调试。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>
4

2 回答 2

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>.

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

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

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

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

所以创建访问冲突是因为孩子,我们想读出 innerText,从来不存在。希望这对某人有所帮助。

于 2013-02-27T08:45:57.280 回答
0

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

于 2013-02-27T07:54:02.890 回答