Cita:  
					Iniciado por J_L_A 
  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!
     Hola Qué tal a todos, muchas gracias por las contribuciones de todos. Quisiera despejar una duda en cuanto a la construcción del XML, ya que me atoré en la parte de conceptos, tengo el siguiente código, el cual funciona a la perfección hasta la parte de conceptos que es donde me manda el sig mensaje: "Referencia a objeto no establecida como instancia de un objeto". '¿¿Alguien me podría decir por que pasa esto??, ¿Necesito un constructor?? 
 private void crearCFD_Click(object sender, EventArgs e)
        { 
            Comprobante comprobante = new Comprobante();
            ComprobanteEmisor comprobanteEmisor = new ComprobanteEmisor();
           t_UbicacionFiscal ubicacionEmisor = new t_UbicacionFiscal();
            ComprobanteReceptor comprobanteReceptor = new ComprobanteReceptor();
            t_Ubicacion ubicacionReceptor = new t_Ubicacion();
            ComprobanteConcepto[] comprobanteConcepto = new ComprobanteConcepto[10];  
            comprobante.version = "2.0";
            comprobante.serie = "ABCD";
            comprobante.folio = "12345";
            comprobante.fecha = Convert.ToDateTime("2010-05-03T14:11:36");
            comprobante.noCertificado = "20001000000100000377";
            comprobante.subTotal = 2000.00M;
            comprobante.total = 2320.00M;
            comprobante.noAprobacion = "49";
            comprobante.anoAprobacion = "2010";
            comprobante.formaDePago = "PAGO EN UNA SOLA EXHIBICIÓN";
            comprobante.descuento = 0.00M;
            comprobante.metodoDePago = "EFECTIVO";   
            comprobanteEmisor.nombre = "CONTRIBUYENTE PRUEBASEIS PATERNOSEIS MATERNOSEIS";
            comprobanteEmisor.rfc = "PAMC660606ER9"; 
            ubicacionEmisor.calle = "PRUEBA SEIS";
            ubicacionEmisor.noExterior = "6";
            ubicacionEmisor.noInterior = "6";
            ubicacionEmisor.colonia = "PUEBLA CENTRO";
            ubicacionEmisor.localidad = "PUEBLA";
            ubicacionEmisor.municipio = "PUEBLA";
            ubicacionEmisor.estado = "PUEBLA";
            ubicacionEmisor.pais = "MÉXICO";
            ubicacionEmisor.codigoPostal = "72000"; 
            comprobanteReceptor.nombre = "ROSA MARÍA CALDERÓN UIRIEGAS";
            comprobanteReceptor.rfc = "CAUR390312S87";
            ubicacionReceptor.calle = "TOPOCHICO";
            ubicacionReceptor.noExterior = "52";
            ubicacionReceptor.colonia = "JARDINES DEL VALLE";
            ubicacionReceptor.estado = "NUEVO LEON";
            ubicacionReceptor.pais = "México";
            ubicacionReceptor.codigoPostal = "95465";  
            comprobanteConcepto[0].unidad = "Servicio";
            comprobanteConcepto[0].noIdentificacion = "01";
            comprobanteConcepto[0].descripcion = "Asesoria Fiscal y administrativa";
            comprobanteConcepto[0].valorUnitario = 2000.00M;
            comprobanteConcepto[0].importe = 2000.00M;  
           comprobanteEmisor.DomicilioFiscal = ubicacionEmisor;
            comprobante.Emisor = comprobanteEmisor;
            comprobanteReceptor.Domicilio = ubicacionReceptor;
            comprobante.Receptor = comprobanteReceptor;
            comprobante.Conceptos = comprobanteConcepto;  
            XmlSerializerNamespaces xmlNameSpace = new  XmlSerializerNamespaces();
            xmlNameSpace.Add("schemaLocation", "http://www.sat.gob.mx/cfd/2 http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd");
            xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            XmlTextWriter xmlTextWriter = new XmlTextWriter("C:\\Users\\BJK1\\Desktop\\archivo" + ".xml", Encoding.UTF8);
            xmlTextWriter.Formatting = Formatting.Indented;
            XmlSerializer xs = new XmlSerializer(typeof(Comprobante)); 
            xs.Serialize(xmlTextWriter, comprobante, xmlNameSpace);
            xmlTextWriter.Close(); 
        }