我试图找出获得两个元素(City& State)值的最佳方法,以便我以后可以使用它们。我正在浏览网站下的每个网站。每次我通过它,我需要拉动城市和州,然后将它们保存为字符串。我有它的工作(有点),但我认为我以错误的方式解决这个问题。
XML:
<Sites>
<Site>
<City>Miami</City>
<State>FL</State>
<Machines>
<Machine>
<MachineName>1950-16-CORE</MachineName>
<ServerRoleType>CoreServer</ServerRoleType>
<ClientRoles>Core</ClientRoles>
<Features>
<Feature>
<FeatureName>CoreProcess</FeatureName>
<FeatureEnabled>true</FeatureEnabled>
</Feature>
<Feature>
<FeatureName>Antivirus</FeatureName>
<FeatureEnabled>true</FeatureEnabled>
</Feature>
</Machine>
<Machine>
<MachineName>1950-16-COREX</MachineName>
<ServerRoleType>CoreExpansionServer</ServerRoleType>
<ClientRoles>CoreEx</ClientRoles>
<Features>
<Feature>
代码:
foreach (XElement xEleSite in siteRows)
{
IEnumerable<XElement> siteLists = from siteList in xEleSite.Descendants("Site")
select siteList;
IEnumerable<XElement> siteCity = siteLists.Descendants("City");
foreach (XElement c in siteCity)
{
string cityElement = c.Value.ToString();
}
}
答案 0 :(得分:2)
考虑这个简化的例子:
<Sites>
<Site>
<City>Miami</City>
<State>FL</State>
<Machines></Machines>
</Site>
<Site>
<City>NY</City>
<State>FL</State>
<Machines></Machines>
</Site>
</Sites>
假设xEleSite
包含此xml,现在您可以使用Anonymous Types来保存信息:
var result = xEleSite.Descendants("Site")
.Select(s => new
{
City = s.Element("City").Value,
State = s.Element("State").Value
});
要迭代它,您可以:
foreach (var i in result)
{
Console.WriteLine(i.City);
Console.WriteLine(i.State);
Console.WriteLine();
}
从最初的问题来看,我认为你需要存储xml中的所有值以便以后使用它,而OP的代码在包含它们的最内层循环中只有局部变量。这种方法提供了访问列表中所有值的机会。