正在内存中加载XDocument

本文关键字:加载 XDocument 内存 | 更新日期: 2023-09-27 17:59:48

这可能是一个非常简单的问题,但我在不断学习!所以有些程序可能看起来有点业余!

我正在开发一个应用程序,该应用程序使用WizardPages控件创建一个类似向导的界面,其中隐藏了选项卡。向导有5个"步骤",每个步骤都有自己的选项卡

在向导的步骤3中,将根据用户选择加载XML文档。他们可以选择加载默认XML或提供自定义XML文件的路径。在步骤3的按钮点击事件中调用loadXML()方法,if语句表示"如果选择了默认选项,则从默认路径加载,否则从用户指定的路径加载"。然后,在步骤4中,XML的这种加载将填充一个列表框。我正在使用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循环,我不知道如何正确格式化这个循环。

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

谢谢你的帮助。我不擅长解释这个问题,所以如果你需要更多的信息/澄清,请提问。

正在内存中加载XDocument

您需要在公共或内部范围中声明它。例如,其他方法可以访问的类的公共或内部属性。尽管你只想使用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.");
    }
}