Te muestro como crear el xml según la documentación del SAT establecida en el anexo 20.
Clase para crear el XML: clic aquí
Video 1: https://www.youtube.com/watch?v=XlTz0NRQLm4
Video 2: https://www.youtube.com/watch?v=HjfqdTspnio
Catálogos SAT mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/
class Program { static void Main(string[] args) { //Llenamos la clase COMPROBANTE-------------------------------------------------------- Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = "1"; oComprobante.Fecha = DateTime.Now; oComprobante.Sello = "faltante"; //sig video oComprobante.FormaPago = "99"; oComprobante.NoCertificado = "12312312313112121212"; //sig video oComprobante.Certificado = ""; //sig video oComprobante.SubTotal = 10m; oComprobante.Descuento =1; oComprobante.Moneda = "MXN"; oComprobante.Total =9; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "20131"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "POWE870601DM7"; oEmisor.Nombre = "Una razón rh de cv"; oEmisor.RegimenFiscal = "605"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "Pepe SA DE CV"; oReceptor.Rfc = "PEPE080801JH1"; oReceptor.UsoCFDI = "P01"; //asigno emisor y receptor oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List<ComprobanteConcepto> lstConceptos = new List<ComprobanteConcepto>(); ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.Importe = 10m; oConcepto.ClaveProdServ = "92111704"; oConcepto.Cantidad = 1; oConcepto.ClaveUnidad = "C81"; oConcepto.Descripcion = "Un misil para la guerra"; oConcepto.ValorUnitario = 10m; oConcepto.Descuento = 1; lstConceptos.Add(oConcepto); oComprobante.Conceptos = lstConceptos.ToArray(); //SERIALIZAMOS.------------------------------------------------- string pathXML = @"C:\Users\Bioxor\source\repos\XSDToXML\miPrimerXML.xml"; XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante)); string sXml = ""; using (var sww= new StringWriter()) { using (XmlWriter writter = XmlWriter.Create(sww)) { oXmlSerializar.Serialize(writter,oComprobante); sXml = sww.ToString(); } } //guardamos el string en un archivo System.IO.File.WriteAllText(pathXML,sXml); } }