2016-11-04 55 views
0

我目前正在開發一個應用程序,讓用戶爲餐廳選擇訂單。當用戶點擊訂單並點擊提交時,它應該添加到名爲「order.xml」的XML文件中,這就是發生的情況。然而,在相同的點擊中,文件中輸入的任何內容都應該顯示回同一視圖的文本框中。我收到一個標記爲「對象引用未設置爲對象實例」的錯誤。在下面顯示的代碼...在Visual Studio 2015中通​​過C#在文本框中顯示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."; 
+0

@Darren它說「選擇新代碼」是錯誤拋出的地方。不幸的是,因爲我是C#的新手,我不太熟悉如何調試此代碼。 –

+0

在你保存XML的地方放一個斷點,然後在你的問題中添加一個代表性的結構樣例 - 這肯定會有助於調查。儘管我已經做出了有根據的猜測。 –

+0

以任何方式幫助我解答問題?瞭解它是否有用會很有用。 –

回答

0

我不是100%確定是什麼問題,但我認爲這可能與以下幾點。

您創建一個新的元素稱爲MenuInforoot變量:

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元素附加到已存在的元素。

相關問題