2

我正在尝试找出获取两个元素(城市和州)值的最佳方法,以便以后使用它们。我正在遍历站点下的每个站点。每次我浏览它时,我都需要拉出 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();
    }    
}
4

1 回答 1

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,现在您可以使用匿名类型来保存信息:

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 的代码在包含它们的最内层循环中只有局部变量。这种方法提供了访问列表中所有值的机会。

于 2013-02-28T05:19:24.447 回答