Club Delphi  
    Paypal   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 23-12-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 863
Poder: 3
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
  #2  
Antiguo 23-12-2024
Avatar de bmfranky
bmfranky bmfranky is offline
Miembro
 
Registrado: may 2024
Ubicación: Gandia, Valencia
Posts: 863
Poder: 3
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) 59 03-06-2025 13:55:35
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 20:51:21.


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