簡體   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