1

私は .net 初心者です。ここに質問する前に、私は多くのサイトを調べました。エラーが表示されます -- 「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」.このエラーは通常、コントロールに null 値がある場合に発生しますが、私の場合、すべてのコントロールにテキストが含まれているのに、なぜこのエラーが発生するのでしょうか? ここに私のxmlファイルがあります

cmbProduct        --> combobox 
txtNewBrand       --> textBox
txtUpdateQuantity --> textBox
txtUpdatePrice    --> textBox

以下のコードを試しました:

onButtonClick

XElement doc = XElement.Load(@"..\..\stock.xml");
var newElement = new XElement("items",
                               new XElement("productname", cmbProduct.Text),
                               new XElement("brandname", txtNewBrand.Text),
                               new XElement("quantity", txtUpdateQuantity.Text),
                               new XElement("price", txtUpdatePrice.Text));
 /*ERROR*/      doc.Element("stock").Add(newElement);
                doc.Save(xpath);
                MessageBox.Show("updated successfully");

編集 :

使用する代わりに

XElement doc = XElement.Load(@"..\..\stock.xml");

私が使った

var doc = XDocument.Load(@"..\..\stock.xml");

そして問題は解決しました。なんでそうなの?

4

4 に答える 4

1

eather doc.Element( "stock")が見つからず、NULLであるか、docがNULLです

于 2012-10-09T08:30:03.643 に答える
1

制限されたコードを考えると、追加したものや存在することを主張したものを確認するのは簡単ではありません。エラーの上にこれらの 2 行を追加してみてください。エラー メッセージに障害が示されます。

Debug.Assert(doc != null, "Can not operate without a valid instance of 'doc'");
Debug.Assert(doc.Element("stock") != null, "Need the stock element to add to!");

「using System.Diagnostics;」を含める必要がある場合があります。ファイルの上部にあります。

于 2012-10-09T08:45:06.590 に答える
1

次の理由で例外が発生しています。

doc.Element("stock").Add(newElement);

stockはルート ノードで、doc.Element("stock")null を返します。実際にやろうとしているのは、xml に項目を追加することです。次のことを試してください。

doc.Add(newElement);

これにより、望ましい結果が得られます。

于 2012-10-09T09:22:13.217 に答える
1

既存の XML をプリロードしていないと思います。もしそうなら、最初から要素docがありません。stock

これを追加してみてください

if (doc.Element("stock") == null)
{
    doc.Add(new XElement("stock"));
}

doc.Element("stock").Add(newElement);
于 2012-10-09T08:58:41.410 に答える