同じ夜の私の2番目の投稿、お詫びします!
さまざまなソフトウェアエントリに関するいくつかの情報を含む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>
LINQtoXMLを使用してXMLファイルをロードしています。私のアプリケーションには2つのリストボックスがあり、最初のリストボックス(listBox1)にはこのXMLファイルの各エントリの名前が入力されています。その後、ユーザーはこれらのエントリを1つのリストボックスから別のリストボックス(listBox2)に移動できます。
listBox2の各エントリを反復処理し、XMLファイルで一致するエントリを見つけて、そのエントリの他のすべての属性を取得するメソッドを作成しようとしています。たとえば、ユーザーがAdobe AcrobatXProfessionalを2番目のリストボックスに追加しました。このメソッドは、XMLファイルを調べて、リストにあるものと一致する属性「name」を持つエントリを見つけ、他のデータ(パス、タイプ、スイッチ)を書き込むか、文字列の値として設定する必要があります。これまでのところ、多くの調整を行った後、私はほとんど達成していません。私はなんとか本当に文字化けした出力を得ることができました。
これまでの私のコードは次のとおりです。
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つの空白行だけです。誰かが私が間違っていることについて正しい方向に私を向けることができますか?
どうもありがとう。