Lendo vários nós filhos do arquivo xml

Eu criei um arquivo Xml com o conteúdo de exemplo da seguinte maneira:

<?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>

Eu preciso ser capaz de ler os filhos do nó Period dentro de um PeriodGroup selecionado. Eu acho que o PeriodName poderia ser um atributo do período se isso é mais sensato.

Eu olhei para um monte de exemplos, mas nenhum parece estar certo e parece haver dezenas de métodos diferentes, alguns usando XmlReader, alguns XmlTextReader e alguns não usam. Como esta é a primeira vez que leio um arquivo Xml, pensei em perguntar se alguém poderia me dar um ponteiro. Eu tenho algo trabalhando apenas para testar as coisas, mas parece desajeitado. Estou usando o VS2010 e c #. Além disso, vejo que muitas pessoas estão usando o LINQ-Xml, então eu apreciaria os prós e contras de usar esse 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);
}

questionAnswers(3)

yourAnswerToTheQuestion