![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Codigo C# Para Validar Xml Altas y Consultas
Hola, pongo el codigo que he terminadopara verificar la integridad de los registros XML antes de su envio.
Codigo para los envios. 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; } 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; } Yo personalmente asigno a una variable gloval los errores devueltos, al realizar la llamada a la funcion , analizo el string devuelto en funcion de si hay errores. En mis pruebas personales funciona correctamente, provad vosotros y me decis...
__________________
Uno se alegra de ser útil. (Isaac Asimov) |
#2
|
||||
|
||||
![]() Muchas gracias por el aporte
Saludos |
#3
|
|||
|
|||
Con este control del fichero Xml se resuelven bastantes problemas tanto a nivel sintáctico como semántico. Pero hay que tener en cuenta que las reglas de validación expuestas en el documento de Errores y Validaciones quedan fuera de este tipo de validación. Los tipos de impuestos utilizados, la validación de los Nif, el régimen tributario adecuado al tipo de operación ( arrendamiento, simplificado, minorista), el sumatorio de bases imponibles y cuotas para obtener el total, las claves de las listas a utilizar en función de si el impuesto es Iva o Igic, etc, etc.... son aspectos que tenemos que validar también después de pasar por este primer filtro.
|
#4
|
|||
|
|||
Muchas gracias bmfranky, al final me ha funcionado.
He hecho pruebas y he puesto los comentarios en el otro post: Cita:
|
#5
|
|||
|
|||
esquema XSD
Hola, donde puedo descargarme el esquema XSD veri*factu de facturas simplificadas para cotejarlo con mi XML? quiero tenerlo en local para que no evitar problema con los tiempos del servidor de la AEAT, pero no lo encuentro
|
#6
|
|||
|
|||
Cita:
https://www.agenciatributaria.es/AEA...icios_web.html |
#7
|
|||
|
|||
Muchas gracias rci.
|
#8
|
|||
|
|||
Estructura de elementos
Estoy teniendo problemas en confeccionar el XML con la estructura que debe llevar el y los espacios de nombres según los esquemas. Intento validar el XML de una factura simplificada y me da error. Por mas que miro los esquemas SuministroInformacion.xsd y ConsultaLR.xsd que son los que necesito, no logro dar con los espacios de nombres y la estructura del XML. ¿Habría alguna plantilla actualizada que me mostrara como seria un XML para una factura simplificada?
|
#9
|
|||
|
|||
Cita:
|
#10
|
|||
|
|||
Xml
Hola, no tengo claro lo siguiente. El registro de alta (Factura) se envía en formato XML, los campos necesarios del registro son de tipo RegistroFacturacionAltaType y lleva; IDVersion,IDFactura,NombreRazonEmisor,TipoFactura,DescripcionOperacion,Desglose,CuotaTotal,ImporteTo tal,Encadenamiento,SistemaInformatico,FechaHoraHusoGenRegistro,TipoHuella,Huella.
1. ¿Estos serian los necesario (sin meter los minOccurs="0") para empaquetar el XML? 2. ¿Que cabecera debo añadir al XML? Estoy intentando organizarme pero necesito vuestra ayuda. Me podéis echar una mano? si alguien pudiera ponerme un ejemplo de como seria un fichero xml generado me ayudaría mucho. Muchas gracias |
#11
|
|||
|
|||
Cita:
![]() ![]() |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problema al validar un código con try catch | Gerson12 | JAVA | 3 | 30-01-2015 09:44:21 |
Adicionar parámetros en consultas creadas por código | GerTorresM | OOP | 3 | 02-08-2010 02:01:16 |
ABM,como validar que no se ingrese un codigo existente a mi BD | juliana_r | Conexión con bases de datos | 10 | 10-06-2010 17:09:24 |
Altas registros access en dos bases datos | perillan | Conexión con bases de datos | 1 | 14-02-2008 22:01:33 |
Aplicacion Altas,Bajas,etc. sin DataBase .... Se Puede? ... | Loscar | Conexión con bases de datos | 1 | 13-10-2003 20:50:53 |
![]() |
|