在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.";

在Visual Studio 2015中通过c#显示文本框中的XML数据

我不能百分之百确定问题是什么,但我认为它可能与以下内容有关:

创建一个名为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, Data2Data3子元素,因此当您执行

select new
 {
     Data1 = MenuInfo.Element("Data1").Value,
     Data2 = MenuInfo.Element("Data2").Value,
     Data3 = MenuInfo.Element("Data3").Value,
 };

你试图访问一个不存在的元素的Value属性。

您最好尝试在加载后立即在XML中找到MenuInfo元素,如果它不存在,则创建它。否则,只需将DataN元素附加到已经存在的元素。