也许我累了,但我不明白为什么这只会返回一个结果。程序下有三个程序元素,但我只得到Excel作为结果。我错过了什么,为什么?
XML:
<ServerRole>
<ServerType>Windows</ServerType>
<Programs>
<Program>Excel</Program>
<Program>Outlook</Program>
<Program>Word</Program>
</Programs>
</ServerRole>
代码段:
var proggies = xlServerRoles.Descendants("ServerRole")
.Where(prg => prg.Element("ServerType").Value == "Windows");
foreach (var prog in proggies.Descendants("Programs").Select(p => new
{
programName = p.Element("Program").Value
}))
{
alInstalledPrograms.Add(prog.programName.ToString());
}
答案 0 :(得分:2)
这是因为你的Xml中只有一个Programs
,所以循环foreach
只循环一次,以便更正确:
foreach (var prog in proggies.Descendants("Program").Select(p => new
{
programName = p.Value
}))
{
alInstalledPrograms.Add(prog.programName.ToString());
}
您可以直接在循环而不是Program
中获取后代Programs
。为了缩短方法,您甚至不需要循环:
var alInstalledPrograms = xlServerRoles.Descendants("ServerRole")
.Where(prg => prg.Element("ServerType").Value == "Windows")
.Descendants("Program")
.Select(p => p.Value)
.ToList();
答案 1 :(得分:1)
你在{em>复数 Element("Program")
的地方使用Elements
,但你的循环不会让你在那里得到它。尝试更像
var installedPrograms = (from serverRole in xlServerRoles.Descendants("ServerRole")
where serverRole.Element("ServerType").Value == "Windows"
from program in serverRole.Element("Programs").Elements("Program")
select program.Value).ToList();