Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-12-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 416
Poder: 5
rci Va por buen camino
Cita:
Empezado por xamminf Ver Mensaje
Hola,

Creo que el problema que puedes tener es relativo a la validacion de la parte del esquema relativa a la firma.
Prueba a quitar del xsd toda la parte relativa a la firma.
Luego prueba la validacion.

Si funciona no es lo ideal pero la firma, en principio, no nos hace falta
Muchas gracias xamminf por tu respuesta.

Lo que me propones ya lo he hecho y ya no da error pero no valida bien:

Cita:
Aún así, he descargado el fichero XSD, lo he modificado quitando las referencias de Signature y he validado contra ese XSD modificado. En ese caso no da error pero tampoco me indica que falta el elemento Desglose. De esta forma me lo da como válido cuando realmente no lo es.
Gracias
Responder Con Cita
  #2  
Antiguo 23-12-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Vlidacion XML con XSD

Hola os copio un trozoi de codigo semi funcional, valida el contenido, la estructura da informacion aproximada, por lomenos con las pruevas realizadas.
Código:
        /// <summary>
        /// Funcion par acomprobar si el xml es correcto
        /// </summary>
        /// <param name="Xml">Xml a cotejar</param>
        /// <param name="path">Path donde estan los archivos.</param>
        /// <returns></returns>
        public bool checaXml(string Xml,string path= ".\\")
        {
            TextReader Read= new StringReader(Xml);
            var schemas = new XmlSchemaSet();
            Xml = Xml.Replace("<RegFactuSistemaFacturacion xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<RegFactuSistemaFacturacion xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\">");
            //Xml = Xml.Replace(" xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\"", "");
            //Xml = Xml.Replace(" xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\"", "");
            using (FileStream stream = File.OpenRead(@path + "SuministroInformacion.xsd"))
            {
                var xsdFileR = XmlSchema.Read(stream, (s, e) =>
                {
                    var x = e.Message;
                });
                schemas.Add(xsdFileR);
            }
            using (FileStream stream = File.OpenRead(@path + "SuministroLR.xsd"))
            {
                var xsdFileR = XmlSchema.Read(stream, (s, e) =>
                {
                    var x = e.Message;
                });
                schemas.Add(xsdFileR);
            }
            using (var fs = File.OpenRead(@path + "xmldsig-core-schema.xsd"))
            using (var reader = XmlReader.Create(fs, new XmlReaderSettings()
            {
                DtdProcessing = DtdProcessing.Ignore // important
            }))
            {
                schemas.Add(@"http://www.w3.org/2000/09/xmldsig#", reader);
            }
            bool isvalid = true;
            StringBuilder sb = new StringBuilder();
            try
            {
                
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ValidationType = ValidationType.Schema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
            settings.Schemas = schemas;
            settings.ValidationEventHandler += (s, e) =>
            {
                if (e.Severity == XmlSeverityType.Warning)
                {
                    sb.AppendLine(string.Format("WARNING: Line : {0}, Message : {1} ", e.Exception.LineNumber, e.Exception.Message));
                }
                else if (e.Severity == XmlSeverityType.Error)
                {
                    sb.AppendLine(string.Format("ERROR: Line : {0}, Message : {1} ", e.Exception.LineNumber, e.Exception.Message));
                }
              isvalid = false;
            };
            XmlReader readXml = XmlReader.Create(new StringReader(Xml), settings);
            
            while (readXml.Read()) { }
            var xdoc = XDocument.Parse(Xml);// (xmlFile);

            }
            catch (XmlSchemaValidationException val1)
            {
                isvalid = false;
            }

            var errores= sb.ToString();
            //puedes guardar la cadena errores en un log o mosrarla en pantalla. 
            if (errores != "")
                MessageBox.Show(errores, "Errores");
            return isvalid;
        }
Le pasamos este XML con fallos provocados.

Cita:
<?xml version="1.0" encoding="utf-16"?>
<RegFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<Cabecera xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<NombreRazon>Nom Empresa</NombreRazon>
<NIF>Nif Empresa</NIF>
</ObligadoEmision>
<RemisionVoluntaria xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<FechaFinVeriFactu />
<Incidencia>N</Incidencia>
</RemisionVoluntaria>
</Cabecera>
<RegistroFactura xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd">
<RegistroAlta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
<IDVersion>1.0</IDVersion>
<IDFactura>
<IDEmisorFactura>Nif Empresa</IDEmisorFactura>
<NumSerieFactura>VC1-24-100020</NumSerieFactura>
<FechaExpedicionFactura>23/12/2024</FechaExpedicionFactura>
</IDFactura>
<NombreRazonEmisor>Nom Empresa</NombreRazonEmisor>
<TipoFactura>F2</TipoFactura>
<FechaOperacion>23-12-2024</FechaOperacion>
<DescripcionOperacion>Venta de materiales servidos cliente contado.</DescripcionOperacion>
<CuotaTotal>0.42</CuotaTotal>
<ImporteTotal>2.42</ImporteTotal>
<Encadenamiento>
<RegistroAnterior>
<IDEmisorFactura>Nif Empresa</IDEmisorFactura>
<NumSerieFactura>VC1-24-100019</NumSerieFactura>
<FechaExpedicionFactura>20-12-2024</FechaExpedicionFactura>
<Huella>944ED876A480F5204DD37DA82802966A49231DB340291EC8386B7380A46FC6D7</Huella>
</RegistroAnterior>
</Encadenamiento>
<SistemaInformatico>
<NombreRazon>Mi nombre</NombreRazon>
<NIF>Mi Nif</NIF>
<NombreSistemaInformatico>Facturas Taller 2024</NombreSistemaInformatico>
<IdSistemaInformatico>A1</IdSistemaInformatico>
<Version>5.1.531.1536</Version>
<NumeroInstalacion>001</NumeroInstalacion>
<TipoUsoPosibleSoloVerifactu>S</TipoUsoPosibleSoloVerifactu>
<TipoUsoPosibleMultiOT>N</TipoUsoPosibleMultiOT>
<IndicadorMultiplesOT>N</IndicadorMultiplesOT>
</SistemaInformatico>
<FechaHoraHusoGenRegistro>2024-12-23T11:07:33+01:00</FechaHoraHusoGenRegistro>
<TipoHuella>01</TipoHuella>
<Huella>A75ACD77CA84DE8AB5B7510D3BAC55DF77A97C70A91560B738484CD31A09ADD0</Huella>
</RegistroAlta>
</RegistroFactura>
</RegFactuSistemaFacturacion>

La respuesta.
Cita:
{
ERROR: Line : 9, Message : El elemento 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd:FechaFinVeriFactu' no es válido. El valor '' no es válido según su tipo de datos 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd:fecha' - Error de restricción de patrón.
ERROR: Line : 19, Message : El elemento 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd:FechaExpedicionFactura' no es válido. El valor '23/12/2024' no es válido según su tipo de datos 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd:fecha' - Error de restricción de patrón.
ERROR: Line : 25, Message : El elemento 'RegistroAlta' en espacio de nombres 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd' tiene un elemento secundario 'CuotaTotal' en espacio de nombres 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd' no válido. Lista esperada de elementos posibles: 'FacturaSimplificadaArt7273, FacturaSinIdentifDestinatarioArt61d, Macrodato, EmitidaPorTerceroODestinatario, Tercero, Destinatarios, Cupon, Desglose' en espacio de nombres 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd'.
}
Si quereis pasadme algun archivo de ejemplo para que lo pueda provar o provad vosotros mismos.
Para usarlo hay que tener en el directorio que queramos o el raiz de la aplicacion los XSD y el "xmldsig-core-schema.xsd" para evitar fallos por la rapidez de acceso a la web.
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
  #3  
Antiguo 27-12-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 416
Poder: 5
rci Va por buen camino
Hola bmfranky, muchas gracias por tu ayuda.

A mi no me ha funcionado pero puede ser que sea un problema mío y/o que me falte hacer algún ajuste.
Cuando intento validar un xml generado por mi programa y que es válido y se envia correctamente, tu validador me da 43 warnings del estilo:
Cita:
No se puede encontrar la información de esquema para el elemento 'RegistroFacturacionAltaType'.
No entiendo muy bien el mensaje porque el elemento que indica en cada línea de warning, si está en el XML.

Por otro lado cuando intento validar un xml Incorrecto, generado por mi programa y que si se envía da un error que falta un dato obligatorio, tu validador me da los mismos warnings que con el primer fichero, pero menos líneas porque algunos elementos no están y no me da ningún error indicando que falta el elemento obligatorio.

Otra cosa que me extraña mucho es que el xml que has puesto tu de ejemplo para validar, es distinto del xml que genera mi programa (y que se envían sin problemas)
Por ejemplo donde tu XML dice 'RegistroAlta' mi XML dice 'RegistroFacturacionAltaType'. Mirando el esquema SuministroInformacion.xsd veo que es el mismo elemento pero lo tuyo es el nombre y lo mío es el tipo.
Cita:
<element name="RegistroAlta" type="sf:RegistroFacturacionAltaType" />
Después me he fijado que tu ejemplo es de un XML completo (con elemento base RegFactuSistemaFacturacion), listo para enviar, ya empaquetado, con una o varias facturas dentro (RegistroFactura y RegistroAlta).

En cambio el XML que intento enviar yo es de una sola factura (con elemento base RegistroFacturacionAltaType o RegistroAlta ), sin empaquetar para enviar, porque precisamente, quiero validar cada factura antes de poner dentro de un paquete para enviar, porque luego falla todo el paquete y no indica que factura está mal.

Supongo que el problema que tengo es este.
Finalmente he probado empaquetar en memoria cada factura una a una antes de validarla y validar ese XML. Creo que así ya me servirá.

Muchas gracias!
Cita:
Empezado por bmfranky Ver Mensaje
Hola os copio un trozoi de codigo semi funcional, valida el contenido, la estructura da información aproximada, por lomenos con las pruevas realizadas.
Código:
        /// <summary>
        /// Funcion par acomprobar si el xml es correcto
        /// </summary>
        /// <param name="Xml">Xml a cotejar</param>
        /// <param name="path">Path donde estan los archivos.</param>
        /// <returns></returns>
        public bool checaXml(string Xml,string path= ".\\")
        {
            TextReader Read= new StringReader(Xml);
            var schemas = new XmlSchemaSet();
            Xml = Xml.Replace("<RegFactuSistemaFacturacion xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<RegFactuSistemaFacturacion xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\">");
            //Xml = Xml.Replace(" xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroLR.xsd\"", "");
            //Xml = Xml.Replace(" xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\"", "");
            using (FileStream stream = File.OpenRead(@path + "SuministroInformacion.xsd"))
            {
                var xsdFileR = XmlSchema.Read(stream, (s, e) =>
                {
                    var x = e.Message;
                });
                schemas.Add(xsdFileR);
            }
            using (FileStream stream = File.OpenRead(@path + "SuministroLR.xsd"))
            {
                var xsdFileR = XmlSchema.Read(stream, (s, e) =>
                {
                    var x = e.Message;
                });
                schemas.Add(xsdFileR);
            }
            using (var fs = File.OpenRead(@path + "xmldsig-core-schema.xsd"))
            using (var reader = XmlReader.Create(fs, new XmlReaderSettings()
            {
                DtdProcessing = DtdProcessing.Ignore // important
            }))
            {
                schemas.Add(@"http://www.w3.org/2000/09/xmldsig#", reader);
            }
            bool isvalid = true;
            StringBuilder sb = new StringBuilder();
            try
            {
                
            XmlReaderSettings settings = new XmlReaderSettings();
            settings.ValidationType = ValidationType.Schema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
            settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
            settings.Schemas = schemas;
            settings.ValidationEventHandler += (s, e) =>
            {
                if (e.Severity == XmlSeverityType.Warning)
                {
                    sb.AppendLine(string.Format("WARNING: Line : {0}, Message : {1} ", e.Exception.LineNumber, e.Exception.Message));
                }
                else if (e.Severity == XmlSeverityType.Error)
                {
                    sb.AppendLine(string.Format("ERROR: Line : {0}, Message : {1} ", e.Exception.LineNumber, e.Exception.Message));
                }
              isvalid = false;
            };
            XmlReader readXml = XmlReader.Create(new StringReader(Xml), settings);
            
            while (readXml.Read()) { }
            var xdoc = XDocument.Parse(Xml);// (xmlFile);

            }
            catch (XmlSchemaValidationException val1)
            {
                isvalid = false;
            }

            var errores= sb.ToString();
            //puedes guardar la cadena errores en un log o mosrarla en pantalla. 
            if (errores != "")
                MessageBox.Show(errores, "Errores");
            return isvalid;
        }
Le pasamos este XML con fallos provocados.




La respuesta.

Si quereis pasadme algun archivo de ejemplo para que lo pueda provar o provad vosotros mismos.
Para usarlo hay que tener en el directorio que queramos o el raiz de la aplicacion los XSD y el "xmldsig-core-schema.xsd" para evitar fallos por la rapidez de acceso a la web.
Responder Con Cita
  #4  
Antiguo 27-12-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Cita:
Empezado por rci Ver Mensaje
Hola bmfranky, muchas gracias por tu ayuda.

A mi no me ha funcionado pero puede ser que sea un problema mío y/o que me falte hacer algún ajuste.
Cuando intento validar un xml generado por mi programa y que es válido y se envia correctamente, tu validador me da 43 warnings del estilo:

No entiendo muy bien el mensaje porque el elemento que indica en cada línea de warning, si está en el XML.

Por otro lado cuando intento validar un xml Incorrecto, generado por mi programa y que si se envía da un error que falta un dato obligatorio, tu validador me da los mismos warnings que con el primer fichero, pero menos líneas porque algunos elementos no están y no me da ningún error indicando que falta el elemento obligatorio.

Otra cosa que me extraña mucho es que el xml que has puesto tu de ejemplo para validar, es distinto del xml que genera mi programa (y que se envían sin problemas)
Por ejemplo donde tu XML dice 'RegistroAlta' mi XML dice 'RegistroFacturacionAltaType'. Mirando el esquema SuministroInformacion.xsd veo que es el mismo elemento pero lo tuyo es el nombre y lo mío es el tipo.


Después me he fijado que tu ejemplo es de un XML completo (con elemento base RegFactuSistemaFacturacion), listo para enviar, ya empaquetado, con una o varias facturas dentro (RegistroFactura y RegistroAlta).

En cambio el XML que intento enviar yo es de una sola factura (con elemento base RegistroFacturacionAltaType o RegistroAlta ), sin empaquetar para enviar, porque precisamente, quiero validar cada factura antes de poner dentro de un paquete para enviar, porque luego falla todo el paquete y no indica que factura está mal.

Supongo que el problema que tengo es este.
Finalmente he probado empaquetar en memoria cada factura una a una antes de validarla y validar ese XML. Creo que así ya me servirá.

Muchas gracias!
Hola, la razon puede ser por la forma de obtener el xml, yo uso las funciones creadas por el mismo xsd, luego lo deserializo y de ahi obtengo el XML, de todas formas segun la version de Visual Studio, obtienes ficheros diferentes, yo uso Visual studio 2015, en 2017 y 2019 daba errores y en 2024, se genera muy diferente y no puedo usar mi codigo y a estas alturas no voy a recodificar todo el programa.


De todas formas pasame un Xml completo a ver si te lo puedo modificar para que te funcione.
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
  #5  
Antiguo 30-12-2024
rci rci is offline
Miembro
 
Registrado: nov 2020
Posts: 416
Poder: 5
rci Va por buen camino
Cita:
Empezado por bmfranky Ver Mensaje
Hola, la razon puede ser por la forma de obtener el xml, yo uso las funciones creadas por el mismo xsd, luego lo deserializo y de ahi obtengo el XML, de todas formas segun la version de Visual Studio, obtienes ficheros diferentes, yo uso Visual studio 2015, en 2017 y 2019 daba errores y en 2024, se genera muy diferente y no puedo usar mi codigo y a estas alturas no voy a recodificar todo el programa.
Hola bmfranky, yo trabajo con Visual Studio 2022. También uso las funciones creadas automáticamente al importar el wsdl como "Connected Services".
He visto que una vez empaqueto cada registro de facturación (RegistroFacturacionAltaType o RegistroAlta) dentro de un paquete listo para enviar (RegFactuSistemaFacturacion) en el xml ya salen los mismos nombres que en tu ejemplo (RegistroAlta).

Cita:
Empezado por bmfranky Ver Mensaje
De todas formas pasame un Xml completo a ver si te lo puedo modificar para que te funcione.
Gracias pero con los cambios que he hecho ya me funciona correctamente

Cita:
Finalmente he probado empaquetar en memoria cada factura una a una antes de validarla y validar ese XML.
Muchas gracias
Responder Con Cita
  #6  
Antiguo 03-01-2025
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Cita:
Empezado por rci Ver Mensaje
Hola bmfranky, yo trabajo con Visual Studio 2022. También uso las funciones creadas automáticamente al importar el wsdl como "Connected Services".
He visto que una vez empaqueto cada registro de facturación (RegistroFacturacionAltaType o RegistroAlta) dentro de un paquete listo para enviar (RegFactuSistemaFacturacion) en el xml ya salen los mismos nombres que en tu ejemplo (RegistroAlta).


Gracias pero con los cambios que he hecho ya me funciona correctamente



Muchas gracias
Perfecto, me alegra que le funcione , un saludo.
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
  #7  
Antiguo 23-12-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Cita:
Empezado por rci Ver Mensaje
Muchas gracias xamminf por tu respuesta.

Lo que me propones ya lo he hecho y ya no da error pero no valida bien:



Gracias
Con mi codigo no hay que tocar nada en los xsd, la primera linea es para evitar el error de no se encuentra....
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
  #8  
Antiguo 23-12-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 599
Poder: 1
bmfranky Va por buen camino
Validar Xml de Consulta

Hola, una vez puesto he terminado el codigo para verificar las consultas antes de enviarlas...
Código:
       /// <summary>
        /// Funcion par acomprobar si el xml es correcto
        /// </summary>
        /// <param name="Xml">Xml a cotejar</param>
        /// <param name="path">Path donde estan los archivos.</param>
        /// <returns></returns>
        public bool checaXml(string Xml, string path = ".\\")
        {
            TextReader Read = new StringReader(Xml);
            var schemas = new XmlSchemaSet();
            Xml = Xml.Replace("<ConsultaFactuSistemaFacturacionType xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">", "<ConsultaFactuSistemaFacturacionType xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/ConsultaLR.xsd\">");
            Xml = Xml.Replace("ConsultaFactuSistemaFacturacionType", "ConsultaFactuSistemaFacturacion");
            //Xml = Xml.Replace(" xmlns=\"https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd\"", "");
            //using (FileStream stream = File.OpenRead(@path + "SuministroInformacion.xsd"))
            //{
            //    var xsdFileR = XmlSchema.Read(stream, (s, e) =>
            //    {
            //        var x = e.Message;
            //    });
            //    schemas.Add(xsdFileR);
            //}
            using (FileStream stream = File.OpenRead(@path + "ConsultaLR.xsd"))
            {
                var xsdFileR = XmlSchema.Read(stream, (s, e) =>
                {
                    var x = e.Message;
                });
                schemas.Add(xsdFileR);
            }
            using (var fs = File.OpenRead(@path + "xmldsig-core-schema.xsd"))
            using (var reader = XmlReader.Create(fs, new XmlReaderSettings()
            {
                DtdProcessing = DtdProcessing.Ignore // important
            }))
            {
                schemas.Add(@"http://www.w3.org/2000/09/xmldsig#", reader);
            }
            bool isvalid = true;
            StringBuilder sb = new StringBuilder();
            try
            {

                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ProcessSchemaLocation;
                settings.ValidationFlags |= XmlSchemaValidationFlags.ReportValidationWarnings;
                settings.Schemas = schemas;
                settings.ValidationEventHandler += (s, e) =>
                {
                    if (e.Severity == XmlSeverityType.Warning)
                    {
                        sb.AppendLine(string.Format("WARNING: Line : {0}, Message : {1} ", e.Exception.LineNumber, e.Exception.Message));
                    }
                    else if (e.Severity == XmlSeverityType.Error)
                    {
                        sb.AppendLine(string.Format("ERROR: Line : {0}, Message : {1} ", e.Exception.LineNumber, e.Exception.Message));
                    }
                    isvalid = false;
                };
                XmlReader readXml = XmlReader.Create(new StringReader(Xml), settings);

                while (readXml.Read()) { }
                var xdoc = XDocument.Parse(Xml);// (xmlFile);

            }
            catch (XmlSchemaValidationException val1)
            {
                isvalid = false;
            }

            var errores = sb.ToString();
            //puedes guardar la cadena errores en un log o mosrarla en pantalla. 
            if (errores != "")
                MessageBox.Show(errores, "Errores");
            return isvalid;
        }
Test
Código:
<?xml version="1.0" encoding="utf-16"?>
<ConsultaFactuSistemaFacturacion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/ConsultaLR.xsd">
  <Cabecera xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/ConsultaLR.xsd">
    <IDVersion xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">1.0</IDVersion>
    <ObligadoEmision xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">
      <NombreRazon>Mi Nombre</NombreRazon> !<<<--- deveria estar despues de aqui el nif , lo he borrado
      </ObligadoEmision>
  </Cabecera>
  <FiltroConsulta xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/ConsultaLR.xsd">
    <PeriodoImputacion>
      <Ejercicio xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">2024</Ejercicio>
      <Periodo xmlns="https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd">12</Periodo>
    </PeriodoImputacion>
    <FechaExpedicionFactura />
  </FiltroConsulta>
</ConsultaFactuSistemaFacturacion>
Respuesta:
Cita:
ERROR: Line : 7, Message : El contenido del elemento 'ObligadoEmision' en espacio de nombres 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd' está incompleto. Lista esperada de elementos posibles: 'NIF' en espacio de nombres 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/tike/cont/ws/SuministroInformacion.xsd'.

Las funciones devuelven un bool, true cuando a pasado la verificacion, si false , revisar el string global errores...
__________________
Uno se alegra de ser útil. (Isaac Asimov)
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Bloque del esquema SistemaInformatico CarlosMz Registros de Facturacion y Eventos (XML) 7 08-11-2024 08:28:14
Esquema BD Zina Varios 8 10-11-2016 17:00:01
¿ como validar xml contra esquema? JXJ Varios 2 27-03-2011 04:09:41
Esquema programación. REHome Varios 6 12-04-2007 22:03:05
crear archivos esquema *.sch KmoCuesta Tablas planas 0 16-09-2005 21:48:05


La franja horaria es GMT +2. Ahora son las 16:28:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi