Leyendo múltiples nodos hijos de archivo xml

He creado un archivo Xml con contenidos de ejemplo de la siguiente manera:

<?xml version="1.0" encoding="utf-8" ?>
<Periods>
  <PeriodGroup name="HER">
    <Period>
      <PeriodName>Prehistoric</PeriodName>
      <StartDate>-500000</StartDate>
      <EndDate>43</EndDate>
    </Period>
    <Period>
      <PeriodName>Iron Age</PeriodName>
      <StartDate>-800</StartDate>
      <EndDate>43</EndDate>
    </Period>
    <Period>
      <PeriodName>Roman</PeriodName>
      <StartDate>43</StartDate>
      <EndDate>410</EndDate>
    </Period>
  </PeriodGroup>
  <PeriodGroup name="CAFG">
    <Period>
      <PeriodName>Prehistoric</PeriodName>
      <StartDate>-500000</StartDate>
      <EndDate>43</EndDate>
    </Period>
    <Period>
      <PeriodName>Roman</PeriodName>
      <StartDate>43</StartDate>
      <EndDate>410</EndDate>
    </Period>
    <Period>
      <PeriodName>Anglo-Saxon</PeriodName>
      <StartDate>410</StartDate>
      <EndDate>800</EndDate>
    </Period>   
  </PeriodGroup>
</Periods>

Necesito poder leer los nodos del nodo Período dentro de un grupo de periodos seleccionado. Supongo que el PeriodName podría ser un atributo de Period si eso es más sensible.

He visto montones de ejemplos, pero ninguno parece estar bien y parece haber docenas de métodos diferentes, algunos utilizando XmlReader, algunos XmlTextReader y otros no. Como esta es la primera vez que leo un archivo Xml, pensé en preguntar si alguien podría darme un puntero. Tengo algo que funciona solo para probar cosas, pero se siente torpe. Estoy usando VS2010 y c #. Además, veo que mucha gente está usando LINQ-Xml, así que apreciaría las ventajas y desventajas de usar este método.

string PG = "HER";
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath("./Xml/XmlFile.xml"));
string text = string.Empty;
XmlNodeList xnl = doc.SelectNodes("/Periods/PeriodGroup");
foreach (XmlNode node in xnl)
{
    text = node.Attributes["name"].InnerText;
    if (text == PG)
    {
        XmlNodeList xnl2 = doc.SelectNodes("/Periods/PeriodGroup/Period");
        foreach (XmlNode node2 in xnl2)
        {
            text = text + "<br>" + node2["PeriodName"].InnerText;
            text = text + "<br>" + node2["StartDate"].InnerText;
            text = text + "<br>" + node2["EndDate"].InnerText;
        }
    }
    Response.Write(text);
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta