Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Para leer un CFDI 4.0 en C#, usa una API XML de .NET, consulta los elementos con el namespace correcto y comprueba cada atributo antes de convertirlo. Si necesitas verificar la estructura, valida además contra el conjunto de esquemas aplicable. Ninguno de esos pasos, por sí solo, confirma que el comprobante sea fiscalmente válido o informa su estado ante el SAT.

Leer el XML, validar el esquema y consultar al SAT son tareas distintas

El CFDI 4.0 es un formato XML definido técnicamente por el Anexo 20. Su esquema describe elementos, atributos, tipos y restricciones; no equivale a una consulta del comprobante ante el SAT. El SAT identifica el Anexo 20 como referencia oficial. Para reglas estructurales concretas, el XSD consultado está alojado en un repositorio de GitHub, por lo que conviene cotejarlo con la versión publicada por el SAT antes de usarlo en producción: XSD CFDI 4.0.

  • Parsear significa leer el documento XML y extraer los datos que necesita tu aplicación.
  • Validar con XSD comprueba si el XML cumple la estructura y restricciones declaradas en los esquemas aplicables.
  • Consultar el comprobante implica usar el servicio o mecanismo de validación fiscal pertinente; leer el archivo localmente no demuestra su autenticidad, vigencia ni estado de cancelación.

El SAT publica información sobre servicios especializados de validación de los comprobantes. Trata el resultado de una consulta fiscal como un dato separado del resultado del parseo y de la validación estructural.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Cómo leer un CFDI 4.0 en C#

El namespace del CFDI es http://www.sat.gob.mx/cfd/4. Un documento puede usar un prefijo XML distinto —o no usar prefijo—, así que no busques etiquetas suponiendo que se llamarán literalmente cfdi:Emisor. En LINQ to XML, asocia el URI del namespace a un objeto XNamespace y construye con él los nombres de los elementos.

using System.Globalization;
using System.Xml;
using System.Xml.Linq;

static XDocument LeerCfdi(string ruta)
{
    var settings = new XmlReaderSettings
    {
        DtdProcessing = DtdProcessing.Prohibit,
        XmlResolver = null
    };

    using var reader = XmlReader.Create(ruta, settings);
    return XDocument.Load(reader);
}

XNamespace cfdi = "http://www.sat.gob.mx/cfd/4";
XDocument documento = LeerCfdi("comprobante.xml");
XElement comprobante = documento.Root
    ?? throw new InvalidDataException("El XML no tiene elemento raíz.");

if (comprobante.Name != cfdi + "Comprobante")
    throw new InvalidDataException("El elemento raíz no es un Comprobante CFDI 4.0.");

XElement? emisor = comprobante.Element(cfdi + "Emisor");
XElement? receptor = comprobante.Element(cfdi + "Receptor");
XElement? conceptos = comprobante.Element(cfdi + "Conceptos");

string? rfcEmisor = (string?)emisor?.Attribute("Rfc");
string? rfcReceptor = (string?)receptor?.Attribute("Rfc");

foreach (XElement concepto in conceptos?.Elements(cfdi + "Concepto")
         ?? Enumerable.Empty<XElement>())
{
    string? descripcion = (string?)concepto.Attribute("Descripcion");
    string? importeTexto = (string?)concepto.Attribute("Importe");

    if (importeTexto is not null &&
        decimal.TryParse(importeTexto, NumberStyles.Number,
            CultureInfo.InvariantCulture, out decimal importe))
    {
        // Procesa importe y descripción según las necesidades de la aplicación.
    }
}

El ejemplo muestra una estrategia de lectura, no una implementación probada ni un validador completo. En una aplicación real, ajusta la carga al origen del XML y captura errores de lectura, formato y conversión. Prohibir DTD y desactivar la resolución de recursos externos evita habilitar procesamiento externo que normalmente no hace falta para leer un CFDI.

Extrae solo lo que necesita tu caso

Empieza por los datos que realmente usará la aplicación: atributos del comprobante, RFC y nombre de emisor y receptor, conceptos e importes. Si necesitas el UUID, busca el complemento de timbre dentro de Complemento; no des por hecho que todo CFDI contiene el mismo complemento ni que esa rama siempre estará presente. Los complementos tienen sus propios namespaces y esquemas, por lo que requieren consultas con sus nombres calificados y reglas correspondientes.

Comprueba los valores antes de convertirlos

Un atributo puede ser obligatorio, opcional o condicional según el elemento y las reglas aplicables. Usa comprobaciones explícitas de existencia y valor; no conviertas directamente un atributo que podría faltar o estar vacío. Para cantidades decimales, analiza con una cultura explícita, por ejemplo InvariantCulture, en lugar de depender de la configuración regional del equipo. Valida también los rangos y formatos que tu lógica necesite, y conserva el texto original si la aplicación debe mostrar o auditar el valor recibido.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Qué puede detectar una validación con XSD

Un XSD puede detectar problemas de estructura, tipos y restricciones declaradas en el esquema. Por ejemplo, el XSD de CFDI 4.0 consultado define RFC, nombre y domicilio fiscal del receptor como requeridos; el código postal fiscal tiene un patrón de cinco dígitos. La descripción del atributo DomicilioFiscalReceptor indica que registra el código postal del domicilio fiscal del receptor del comprobante. Estas son referencias del esquema alojado en GitHub citado arriba, no una confirmación de que ese archivo sea la versión oficial vigente.

Para validar desde .NET, carga los XSD pertinentes en un XmlSchemaSet y configura la lectura para validar contra ese conjunto, registrando los errores. El conjunto debe corresponder a la versión aplicable del CFDI y contemplar los esquemas adicionales requeridos por los complementos presentes. No basta con descargar un único XSD y asumir que cubre todos los documentos.

La validación XSD tampoco garantiza por sí sola que se hayan satisfecho todas las reglas de negocio, catálogos, reglas SAT o condiciones de un complemento; tampoco consulta el estado fiscal del comprobante. Mantén separados en tu aplicación los resultados de parseo, validación estructural y consulta fiscal para que un éxito en una etapa no se presente como éxito en las demás.

Cuida la vigencia de esquemas, catálogos y complementos

El material técnico alrededor del CFDI puede incluir XSD, transformaciones XSLT, guías de llenado, Anexo 20 y catálogos. Algunos recursos pueden cambiar; evita incrustar catálogos sin versión o fecha en una aplicación que dependa de su vigencia. El inventario de recursos de mcp-cfdi-mx sirve como orientación sobre clases de recursos técnicos, pero no sustituye la documentación oficial vigente del SAT.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Antes de desplegar o actualizar un parser, coteja los esquemas y reglas que usa con las publicaciones oficiales aplicables. Si procesas comprobantes de terceros, conserva una estrategia para reconocer cambios y rechazar o poner en revisión documentos que no puedas interpretar con seguridad, en lugar de descartar silenciosamente datos desconocidos.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Pruebas prácticas para evitar errores

Construye pruebas con XML representativos y cotejados con la documentación oficial antes de usar el código con datos reales. Incluye casos con prefijo distinto o sin prefijo, atributos ausentes o vacíos, varios conceptos, importes con formato decimal XML, complementos presentes y ausentes, XML mal formado y documentos estructuralmente inválidos. Añade pruebas de lote si la aplicación procesa múltiples archivos, y registra cuál comprobante falló y en qué etapa sin confundir el error de lectura con un resultado fiscal.

No hay aquí resultados de ejecución ni pruebas de rendimiento: el ejemplo ilustra el patrón de lectura y debe verificarse en el proyecto, versión de .NET y conjunto de esquemas que vayas a desplegar.

¿Conviene usar una biblioteca de CFDI?

Una biblioteca puede reducir trabajo si cubre exactamente la operación requerida, pero verifica el alcance en su código y documentación: que genere CFDI no significa que también pueda leerlos, validarlos o consultar su estado fiscal. Por ejemplo, el repositorio EmiteCfdi 4.0 se describe como una biblioteca C# para generación; esa descripción no establece capacidades de parseo, mantenimiento ni compatibilidad actual. Antes de adoptarla, revisa licencia, versión, dependencias y funciones concretas.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Para una integración de producción que requiera emisión o validación administrada, compara servicios especializados o soluciones PAC según los requisitos del sistema. No sustituyas esa evaluación por un parser local: son responsabilidades distintas.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.