2013-02-15 55 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