2

後で使用できるように、2 つの要素 (都市と州) の値を取得する最善の方法を見つけようとしています。Sites の下のすべての Site をループしています。これを実行するたびに、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 に答える