Подумайте об использовании правильной сериализации xml вместо написания собственной. .NET Framework справится со всеми вашими проблемами, включая массивы, коллекции или списки.
Ваш код должен быть таким простым:
using (var stream = File.OpenRead(filename)) {
var serializer = new XmlSerializer(typeof(AccountsDocument));
var doc = (AccountsDocument)serializer.Deserialize(stream);
return doc.Accounts;
}
Класс AccountsDocument:
[XmlRoot("accounts")]
public class AccountsDocument {
[XmlElement("account")]
public Account[] Accounts { get; set; }
}
Класс учетной записи:
public class Account {
[XmlAttribute("ID")]
public string Id { get; set; }
[XmlElement("stuff")]
public StuffType Stuff { get; set; }
// ... and so on
}