How to iterate through an XDocument's Nodes

Try this. Not sure why you need the second doc.

foreach (XElement xe in doc.Descendants("Profile"))
{
    MessageBox.Show(xe.Element("username").Value);
}

Its easier to use a XPathDocument and a XPath expression.

var doc = new XPathDocument("files\\config.xml")
foreach (var username in doc.CreateNavigator().Select("//username")
{
    ...
}

If you are looking for inner node, i.e. recursive like, you can check for the element has element. For example assum you reading your xml from database

string xmlRoot = "select XmlItem from db";
XDocument doc = XDocument.Parse(xmlRoot);
List<XElement> xElementList = doc.Descendants().ToList();
foreach(XElement element in xElementList )
{
  // read the element and do with your node
  if(element.HasElements)
    {
      // here you can reach nested node
    }

}