我在同一天晚上的第二个帖子,道歉!
我有一个 XML 文件,其中包含各种软件条目的几位信息(如下所示的片段)。
<software>
<software_entry
name="Adobe Acrobat X Standard"
path="Applications\Acrobat\Acrobat X Standard\AcroStan.msi"
type="msi"
switches="/qn ALLUSERS=1"
/>
<software_entry
name="Adobe Acrobat X Professional"
path="Applications\Acrobat\Acrobat X Pro\AcroPro.msi"
type="msi"
switches="/qn ALLUSERS=1"
/>
</software>
我正在使用 LINQ to XML 加载 XML 文件。在我的应用程序中,我有两个列表框,第一个列表框 (listBox1) 填充了此 XML 文件中每个条目的名称。然后,用户可以将这些条目从一个列表框移动到另一个列表框 (listBox2)。
我正在尝试编写一个方法来遍历 listBox2 中的每个条目,在 XML 文件中找到匹配的条目,然后检索该条目的所有其他属性。例如,用户已将 Adobe Acrobat X Professional 添加到第二个列表框。该方法应该查看 XML 文件,找到与列表中的内容匹配的属性“名称”的条目,并写入其他数据(路径、类型、开关)或将它们设置为字符串的值。到目前为止,经过多次调整,我取得的成就很少。我设法得到了一些非常乱码的输出。
到目前为止,我的代码如下。
private void writeBatchFile()
{
// Get temp folder location
string tempPath = Path.GetTempPath();
// Create batch file
using (StreamWriter writer = File.CreateText(tempPath + @"\swInstaller.cmd"))
{
// Loop through entries in listBox2
foreach (string item in listBox2.Items)
{
var dataFromXML = from data in document.Descendants("software_entry")
where data.Element("name").Value == item
select new
{
fileName = (string) data.Element("name"),
filePath = (string) data.Element("path"),
fileType = (string) data.Element("type"),
fileSwitches = (string) data.Element("switches")
};
// Write to batch file
writer.WriteLine(fileName + filePath + fileType + fileSwitches);
}
}
}
在代码中,我为 listBox2 中的文本值提供了一个 foreach 循环。然后,我尝试在 XML 中查找该值等于“名称”值的位置,然后在找到时将该值的其他属性设置为这些字符串(路径为 filePath,类型为 fileType 等)。最后,我试图将这些字符串写入文本文件。通过这种特殊的尝试,我得到的只是 5 个空白行。谁能指出我做错了什么的正确方向?
非常感谢。