将XDocument加载到内存中

时间:2013-02-15 19:40:13

标签: c# linq-to-xml

这可能是一个非常简单的问题,但随着我的进展,我有点学习!因此,一些编程可能看起来有点业余!

我正在开发一个使用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语句来确定要加载的文件(默认或自定义)。 / p>

这在我的应用程序的第5步中变得非常混乱,我正在尝试创建一个foreach循环来遍历步骤4中列表框中的每个条目(由此XML文档填充),基于此检索其他属性信息列表框中的那个(它只是软件的名称,其他属性包括文件类型,路径等),然后用包含所有这些信息的批处理文件写一行。实际上,我不知道如何正确地格式化这个循环,同时考虑到XDocument加载的if循环。

我考虑使用here描述的第二种方法,但我不确定如何合并第三步中的用户选择元素。我只是有点困惑!

感谢您的帮助。我不善于解释这个问题,所以如果您需要更多信息/说明,请提出问题。

1 个答案:

答案 0 :(得分: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.");
    }
}