0

我有一个问题,我无法弄清楚这是怎么回事。我想将元素从列表框中插入到我的 XML 文件中。在列表框中有 Menuelem 元素,它有一个字符串和一个 int 变量。

    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

你有空引用,因为你没有“订单”作为根元素,所以你需要这样做

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

如果您在“用户”中有多个元素,那么您可以使用方法“元素”而不是“元素”。“Element”方法将返回第一个元素,“Elements”方法将返回 XElement 的 IEnumerable。

于 2012-11-19T06:14:48.783 回答
-1

它会抛出一个NullReferenceException,因为显然您的文档中没有“订单”元素,因此doc.Element("order")返回 null。

于 2012-11-19T02:40:03.437 回答
-1

您的代码尝试查找“订单”元素作为仅包含根元素(“订单”)的文档的直接子元素,并作为结果获取null. 有关Element它搜索元素的内容和返回时间的详细信息,请参阅null

您需要正确选择新插入的元素。简单的选项是Descendants按名称使用并选择最后一个(即添加刚刚添加的用户)

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

更简单的选择是完全构建“用户”元素并将其添加到树中。比你不需要搜索刚刚添加到它的节点的文档。

于 2012-11-19T02:44:04.223 回答