Q:

Loop through section without pulling all elements of the same name

Attempting to create an object to loop through that data to pull the server information. There are elements of the same name in different nodes. Below is an example of the XML.
<DataCenters>
  <DataCenter>
    <Name>DcName1</Name>
    <Clusters>
      <Cluster HAEnabled="False" DrsEnabled="True">
        <Name>Chicago</Name>
        <VMHosts>
          <VMHost>
            <Name>vm01.domain.com</Name>
          </VMHost>
          <VMHost>
            <Name>vm02.domain.com</Name>
          </VMHost>
        </VMHosts>
      </Cluster>
      <Cluster HAEnabled="True" DrsEnabled="True">
        <Name>Daytona</Name>
        <VMHosts>
          <VMHost>
            <Name>spa001.domain.com</Name>
          </VMHost>
          <VMHost>
            <Name>spa002.domain.com</Name>
          </VMHost>
        </VMHosts>
      </Cluster>
    </Clusters>
  </DataCenter>
  <DataCenter>
    <Name>DcName2</Name>
    <Clusters>
      <Cluster HAEnabled="True" DrsEnabled="True">
        <Name>Cleveland</Name>
        <VMHosts>
          <VMHost>
            <Name>vm20.domain.com</Name>
          </VMHost>
          <VMHost>
            <Name>vm21.domain.com</Name>
          </VMHost>
        </VMHosts>
      </Cluster>
      <Cluster HAEnabled="False" DrsEnabled="True">
        <Name>StLouis</Name>
        <VMHosts>
          <VMHost>
            <Name>vm07.domain.com</Name>
          </VMHost>
          <VMHost>
            <Name>vm08.domain.com</Name>
          </VMHost>
        </VMHosts>
      </Cluster>
    </Clusters>
  </DataCenter>
</DataCenters>
<VMHosts>
  <VMHost>
    <Name>spa001.domain.com</Name>
    <Version>6.0.0</Version>
    <Build>5572656</Build>
    <Manufacturer>Cisco Systems Inc</Manufacturer>
    <Model>UCSC-C240-M4SX</Model>
  </VMHost>
  <VMHost>
    <Name>spa002.domain.com</Name>
    <Version>6.0.0</Version>
    <Build>5572656</Build>
    <Manufacturer>Cisco Systems Inc</Manufacturer>
    <Model>UCSC-C240-M4SX</Model>
  </VMHost>
</VMHosts>

Below is the code that I'm using. This pulled all VMHost elements. I am trying to stay within the VMHosts node. What's the best way to achieve this?
  IEnumerable<XElement> vmHostsRows = from vmHostRows in XmlDoc.Descendants("VMHosts")
                                      select vmHostRows;

  IEnumerable<XElement> vmHostLists = from vmHostList in vmHostsRows.Descendants("VMHost")
                                      select vmHostList;

  foreach (XElement vHosts in vmHostLists)
  {
      MessageBox.Show(vHosts.Element("Name").Value.ToString());
  }

A:

The reason it's returning all VMHosts elements is because you're using Descendants.  This method returns any element that matches the name, no matter where it is in the xml. 
 You should use Elements instead, since this will return only the direct child elements of the element you call it from.  In your case, you should call it on the root element of your xml (I'm assuming your xml has a root element that you aren't showing):
IEnumerable<XElement> vmHostLists = XmlDoc.Root.Element("VMHosts").Elements("VMHost");
foreach (XElement vHosts in vmHostLists)
{
    MessageBox.Show(vHosts.Element("Name").Value.ToString());
}  

