ciao,
quando lavoro con xml, e sono dentro a .net, faccio fare al framework la serializzazione/deserializzazione degli oggetti, e poi lavoro sempre con quelli.
Ti faccio un esempio, se voglio leggere/scrivere da un file xml (o anche da una stringa in memoria passando attraverso un MemoryStream) una lista di "Articoli", dentro al mio programma lavorero' con un'entita' "Articolo".
Nel caso di database, ogni colonna sara' mappata su una proprieta' di questo oggetto che il mio programma deve gestire, se invece parliamo di Xml, le stesse proprieta' saranno mappate come attributi su nodi Xml.
Ad esempio una classe articolo potrebbe avere:
class Articolo
{
private string nome = string.Empty;
public string Nome
{
get { return nome; }
set { nome = value; }
}
private List<Elemento> elementi;
public List<Elemento> Elementi
{
get { return elementi; }
set { elementi= value; }
}
...
Poi se voglio avere piu' controllo sull'xml generato decoro le classi con gli attributi:
class Articolo
{
private string nome = string.Empty;
[XmlAttribute("NAME")]
public string Nome
{
get { return nome; }
set { nome = value; }
}
private List<Elemento> elementi;
[XmlArray("MIOTAG")]
public List<Elemento> Elementi
{
get { return elementi; }
set { elementi= value; }
}
...
E quindi da codice lavoro sempre con gli oggetti che sono istanze/collection delle mie classi, e leggere e scrivere diventa abbastanza banale:
XmlSerializer serializer = new XmlSerializer(typeof(List<Articolo>));
//--- lettura
List<Articolo> lista = new List<Articolo>();
using (FileStream stream = new FileStream("...", FileMode.Open))
{
lista = serializer.Deserialize(stream) as List<Articolo>;
}
...
//--- scrittura
using (FileStream stream = new FileStream("...", FileMode.Create))
{
serializer.Serialize(stream, lista) ;
}
Adesso non so se il tuo progetto (e quindi il tuo file xml) sia riconducibile a questo tipo di approccio, pero' a mio avviso, è il piu' efficiente soprattuto perche' tu lavori sempre sfruttando .net, come ade esempio i generics (List<T>) e quindi come dici giustamente tu, non devi farti "noiosamente" tuttal struttura di Nodi lavorando con Xml etc...
Poi se hai la fortuna di lavorare con framework 3.5 allora la cosa puo' cambiare visto che hai Linq 
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo