我有一个问题,我无法弄清楚是什么问题。我想从列表框中将元素插入到我的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解决这个问题吗?
答案 0 :(得分:0)
你有空参考,因为你没有“订购”作为根元素,所以你需要这样做
XElement element = doc.Element("orders").Element("user").Element("order");
element.Add(menuelem);
如果“users”中有多个元素,则可以使用Method“Elements”而不是“Element”。 “Element”方法将返回第一个元素,“Elements”方法将返回XElement的IEnumerable。
答案 1 :(得分:-1)
它抛出NullReferenceException
,因为显然文档中没有“order”元素,因此doc.Element("order")
返回null。
答案 2 :(得分:-1)
您的代码尝试查找“order”元素作为文档的直接子元素,该元素仅包含根元素(“orders”),结果为null
。有关搜索元素的内容以及何时返回null
的详细信息,请参阅Element
。
您需要正确选择新插入的元素。简单的选择是按名称使用Descendants
并选择最后一个(通过添加添加的用户)
doc.Descendants("order").Last().Add(menuelem);
更简单的选择是完全构建“user”元素,然后将其添加到树中。您不需要搜索刚添加到其中的节点的文档。