Ваш вопрос немного сбивает с толку именно тот результат, который вы желаете.Я считаю, что самый быстрый способ сделать это - использовать XmlTextReader, который предназначен только для пересылки и очень быстр.Ниже приведен пример того, как его использовать;это может не совсем соответствовать вашим требованиям (опять же, их трудно понять), но это должно дать вам начало.
Мой пример дает вам список всех людей и их фреймов.
//define a couple of classes to hold people and frames
public class Person
{
public string PersonId { get; set; }
public string TeamId { get; set; }
public List<Frame> Frames { get; set; }
public Person()
{
Frames = new List<Frame>();
}
}
public class Frame
{
public string N { get; set; }
public string X { get; set; }
public string Y { get; set; }
public string S { get; set; }
}
Теперь мы будем читать в классы, используя XmlTextReader:
XmlTextReader reader = new XmlTextReader(@"c:\temp\frames.xml");
var people = new List<Person>();
var person = new Person();
while (reader.Read())
{
if (reader.IsStartElement())
{
switch (reader.Name)
{
case "FrameSet":
var id = reader.GetAttribute("PersonId");
if (!people.Any(p => p.PersonId == id))
{
person = new Person { PersonId = id, TeamId = reader.GetAttribute("TeamId") };
people.Add(person);
}
else
{
person = people.First(p => p.PersonId == id);
}
break;
case "Frame":
var n = reader.GetAttribute("N");
var x = reader.GetAttribute("X");
var y = reader.GetAttribute("Y");
var s = reader.GetAttribute("S");
person.Frames.Add(new Frame { N = n, X = x, Y = y, S = s });
break;
}
}
}