BenuR, hay una manera más fácil para generar el xml.
 
-Convertir cfdv2.xsd (está en la página del SAT) a clase de c# desde la linea de comandos ms-dos: 
(Devuelve cfdv2.cs)
-Integrarlo al proyecto como módulo de clase, por ejemplo con el nombre Comprobante.cs 
-Ahora se declara una variable de tipo Comprobante 
Código:
 Comprobante comprobante = new Comprobante();
  -Se le asignan valores: 
Código:
 comprobante.version = "2.0";
comprobante.serie = "ABCD";
.
.
.
  ... y así con cada clase (emisor, receptor, conceptos, impuestos, etc.) del módulo Comprobante.cs: 
Código:
 ComprobanteEmisor comprobanteEmisor = new ComprobanteEmisor();
comprobanteEmisor.nombre = "Juan Pérez";
comprobanteEmisor.rfc = "ABCD0102039Z0";
.
.
.
  -Después se genera el xml con: 
Código:
 using System.xml;
using System.Xml.Serialization;
using System.Text.Encoding;
XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces();
xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
XmlTextWriter xmlTextWriter = new XmlTextWriter(RutaConNombreArchivoSinExtension + ".xml", Encoding.UTF8);
xmlTextWriter.Formatting = Formatting.Indented;
XmlSerializer xs = new XmlSerializer(typeof(Comprobante));
xs.Serialize(xmlTextWriter, comprobante, xmlNameSpace);
xmlTextWriter.Close();
  Será necesario generar el xml dos veces: la segunda para insertarle el sello digital. Si quieren mas adelante los digo como se hace. 
Espero sirva. A la orden para dudas, correcciones u objeciones. 
Saludos!