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

プログラムのデバッグを実行すると、エラーは発生しません。数秒間、プログラムが正常に開始されます。その後、クラッシュしてデバッグを終了します。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" の子にアクセスしようとします<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 で "Clean Solution" と "Rebuild" を試してから、もう一度やり直してください。

于 2013-02-27T07:54:02.890 に答える