0

問題があり、何が問題なのかわかりません。リストボックスから XML ファイルに要素を挿入したいと考えています。リストボックスには、文字列と int 変数を持つ Menuelem 要素があります。

    dt = DateTime.Now;
    XDocument doc = XDocument.Load(path);

    XElement user = new XElement("user", new XAttribute("id", id),
                        new XElement("order", new XAttribute("id", key),
                            new XElement("date", dt.ToString()))
                    );
    doc.Element("orders").Add(user);
    doc.Save(path);
    foreach (Menuelem item in listBox6.Items)
    {
        int j=0;
        var menuelem = new XElement("menuelem", new XAttribute("db", j),
                       new XElement("name", item.Nev),
                       new XElement("price", item.Ar));
        doc.Element("order").Add(menuelem); //throws nullreferenceexception
        doc.Save(path);
        j++;
    }

    listBox6.Items.Clear();
    label3.Text = "";
    key++;

}

私のXMLを見たいのは次のようなものです:

<?xml version="1.0" encoding="utf-8" ?> 
<orders>
 <user id="0">
  <order id="0">
   <date>2012.11.19. 2:16:12</date>
   <menuelem db = "0">
    <name>asdasdas</name>
    <price>1000</price>
   <menuelem db = "1">
    <name>asds</name>
    <price>2000</price>
  </order>
 <user id="0">
  <order id="1">
    <date>2012.11.19. 2:16:15</date>
    <menuelem db = "0">
      <name>asdasdas</name>
      <price>1000</price>
    <menuelem db = "1">
      <name>asds</name>
      <price>2000</price>
   </order>
 </user>
</orders>

誰でもlinqを使用してこれを解決できますか?

4

3 に答える 3

0

ルート要素として「順序」がないため、null参照を取得したため、これを行う必要があります

 XElement element =  doc.Element("orders").Element("user").Element("order");
 element.Add(menuelem);

「users」内に複数の要素がある場合は、「Element」の代わりにメソッド「Elements」を使用できます。「Element」メソッドは最初の要素を返し、「Elements」メソッドは XElement の IEnumerable を返します。

于 2012-11-19T06:14:48.783 に答える
-1

コードは、ルート要素 ("orders") のみを含むドキュメントの直接の子として "order" 要素を見つけようとし、結果として を取得しようとしますnullElement要素の検索対象と返されるタイミングの詳細については、 を参照してくださいnull

新しく挿入した要素を正しく選択する必要があります。簡単なオプションはDescendants、名前で使用し、最後のものを選択することです(これは、追加によって追加されたユーザーです)

 doc.Descendants("order").Last().Add(menuelem);

より簡単なオプションは、ツリーに追加するよりも、「ユーザー」要素を完全に構築することです。ドキュメントに追加されたばかりのノードをドキュメントで検索する必要はありません。

于 2012-11-19T02:44:04.223 に答える