在Visual Studio 2015中通过c#显示文本框中的XML数据
本文关键字:文本 数据 XML 显示 Studio Visual 2015 | 更新日期: 2023-09-27 18:16:14
我目前正在开发一个允许用户为餐厅选择订单的应用程序。当用户单击订单并单击提交时,它应该添加到名为"order. XML"的XML文件中,这就是发生的事情。但是,在同一次单击中,无论在文件中输入了什么,都应该显示回同一视图上的文本框中。我得到一个错误标记为"对象引用未设置为对象的实例。"在如下所示的代码…
var order = from MenuInfo in doc.Descendants("MenuInfo")
select new
{
Data1 = MenuInfo.Element("Data1").Value,
Data2 = MenuInfo.Element("Data2").Value,
Data3 = MenuInfo.Element("Data3").Value,
};
你能帮我调试一下吗,因为我在跺脚。
完整代码示例
XDocument doc = XDocument.Load("order.xml");
XElement root = new XElement("MenuInfo");
root.Add(new XElement("Data1", mealListView.SelectedValue.ToString()));
root.Add(new XElement("Data2", _seat));
root.Add(new XElement("Data3", buttonTable1.Text));
doc.Element("MenuInfo").Add(root);
doc.Save("order.xml");
var order = from MenuInfo in doc.Descendants("MenuInfo")
select new
{
Data1 = MenuInfo.Element("Data1").Value,
Data2 = MenuInfo.Element("Data2").Value,
Data3 = MenuInfo.Element("Data3").Value,
};
summaryTextBox.Text = "";
foreach (var MenuInfo in order)
{
summaryTextBox.Text = summaryTextBox.Text + "Meal: " + MenuInfo.Data1 + "'n";
summaryTextBox.Text = summaryTextBox.Text + " Seat ID: " + MenuInfo.Data2 + "'n";
summaryTextBox.Text = summaryTextBox.Text + " Table ID: " + MenuInfo.Data3 + "'n";
}
if (summaryTextBox.Text == "")
summaryTextBox.Text = "No Results.";
我不能百分之百确定问题是什么,但我认为它可能与以下内容有关:
创建一个名为MenuInfo
的新元素作为root
变量:
XElement root = new XElement("MenuInfo");
然后将这个新元素附加到XML中的另一个元素,也称为MenuInfo
:
doc.Element("MenuInfo").Add(root);
现在你可能有一个名为MenuInfo
的元素和一个名为MenuInfo
的子元素,像这样:
<MenuInfo>
<MenuInfo>
<Data1>one</Data1>
<Data2>two</Data2>
<Data3>three</Data3>
</MenuInfo>
</MenuInfo>
在随后的选择中,您将选择父MenuInfo
元素,该元素没有任何Data1
, Data2
或Data3
子元素,因此当您执行
select new
{
Data1 = MenuInfo.Element("Data1").Value,
Data2 = MenuInfo.Element("Data2").Value,
Data3 = MenuInfo.Element("Data3").Value,
};
你试图访问一个不存在的元素的Value
属性。
您最好尝试在加载后立即在XML中找到MenuInfo
元素,如果它不存在,则创建它。否则,只需将DataN
元素附加到已经存在的元素。