2013-02-15 86 views
0

這可能是一個非常簡單的問題,但隨着我的進展,我有點學習!所以一些編程可能看起來有點業餘!將XDocument加載到內存中

我正在開發一個應用程序,該應用程序使用WizardPages控件創建隱藏了選項卡的嚮導式界面。嚮導有5個「步驟」,每個步驟都有自己的選項卡。

在嚮導的第3步中,根據用戶選擇加載XML文檔。他們可以選擇加載默認的XML或提供自定義XML文件的路徑。在步驟3的按鈕單擊事件中調用loadXML()方法,並在if語句中聲明「如果選擇了默認選項,則從默認路徑加載,否則從用戶指定的路徑加載」。這個XML的加載然後在步驟4中填充一個列表框。我使用XML來LINQ,正如你可以從下面的代碼片斷看到的那樣。

private void loadXML() 
    { 
     if (configFilePathTextBox.Enabled == true) 
     { 
      // Load XML from that path 
      XDocument config = XDocument.Load(configFilePathTextBox.Text); 
      // Populate next screen 
      IEnumerable<XElement> elList = 
       from el in config.Descendants("software_entry") 
       select el; 
      foreach (XElement el in elList) 
       listBox1.Items.Add(el.Attribute("name")); 
      MessageBox.Show("Configuration file loaded successfully."); 
     } 
     else 
     { 
      // Load XML from default path 
      XDocument config = XDocument.Load(Application.StartupPath + @"\config.xml"); 
      // Populate next screen 
      IEnumerable<XElement> elList = 
       from el in config.Descendants("software_entry") 
       select el; 
      foreach (XElement el in elList) 
       listBox1.Items.Add(el.Attribute("name")); 
      MessageBox.Show("Configuration file loaded successfully."); 
     } 
    } 

這是有效的,但有沒有辦法加載XDocument,以便它可以在所有方法中訪問?實際上,每次我想對它做任何事情時都必須使用XDocument.Load方法,並且在每次加載時,我必須使用相同的if語句來確定要加載哪個文件(默認或自定義)。

這讓我感到非常困惑,因爲在我的應用程序的第5步中,我試圖創建一個foreach循環遍歷第4步中的每個條目(由此XML文檔填充),檢索其他屬性信息在列表框中的一個(它只是軟件的名稱,其他屬性包括文件類型,路徑等),然後將所有這些信息寫入批處理文件。事實上,我不知道如何正確地格式化這個循環,考慮到XDocument加載的if循環。

我想過使用第二種方法描述here,但我不知道如何納入我的第三步中的用戶選擇元素。我只是有點困惑!

感謝您的任何幫助。我不擅長解釋問題,因此如果您需要更多信息/澄清,請提出問題。

回答

0

您需要在publicinternal範圍內聲明它。例如其他方法有權訪問的類的publicinternal屬性。看起來你不關心這個,但你只想使用program.cs文件。

要使用它作爲一個領域,你的代碼將變成:

public class Program 
{ 
    XDocument document; 

    private void loadXML() 
    {    
     if (configFilePathTextBox.Enabled == true) 
     { 
      document = XDocument.Load(configFilePathTextBox.Text); 
     } 
     else 
     { 
      document = XDocument.Load(Application.StartupPath + @"\config.xml"); 
     } 

     IEnumerable<XElement> elList = 
      from el in document.Descendants("software_entry") 
      select el; 

     foreach (XElement el in elList) 
      listBox1.Items.Add(el.Attribute("name")); 

     MessageBox.Show("Configuration file loaded successfully."); 
    } 
} 
+0

我使用Visual Studio 2010中,和我所有的代碼迄今已被觀看了某些形式我以前做的代碼完成設計的。我沒有添加類 - 我唯一擁有的是默認的Program.cs。 – CSF90 2013-02-15 20:17:13

+0

它可能是Program的一個領域,但通常你不需要太多代碼在Program.cs – 2013-02-15 20:18:48

+0

輝煌,這完美的作品。非常感謝你! 當我使用VS2010和表單時,我很難弄清C#應用程序的結構,因爲它與大多數完整的在線文檔/指南不同,但這是我學習的方式。 – CSF90 2013-02-15 20:42:58