正在内存中加载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循环,我不知道如何正确格式化这个循环。
我考虑过使用这里描述的第二种方法,但我不确定如何将第三步中的用户选择元素合并到其中。我只是有点困惑!
谢谢你的帮助。我不擅长解释这个问题,所以如果你需要更多的信息/澄清,请提问。
您需要在公共或内部范围中声明它。例如,其他方法可以访问的类的公共或内部属性。尽管你只想使用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.");
}
}