繁体   English   中英

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

[英]Displaying XML data in textbox through C# in Visual Studio 2015

我目前正在开发一个应用程序,该应用程序允许用户选择餐馆的订单。 当用户单击订单并单击提交时,它将添加到名为“ 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.";

我不确定100%是什么问题,但我认为可能与以下问题有关。

您创建一个名为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>

在随后的选择中,您将选择不包含任何Data1Data2Data3子元素的父MenuInfo元素,因此当您这样做时

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

您正在尝试访问不存在的元素上的Value属性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM