Ver Mensaje Individual
  #1369  
Antiguo 04-09-2021
unomasmas unomasmas is offline
Miembro
 
Registrado: dic 2019
Posts: 112
Reputación: 5
unomasmas Va por buen camino
Cita:
Empezado por Ramon88 Ver Mensaje
Hola,

No puedo avanzar, tengo este error y no consigo ver donde esta el fallo... El validador que utilizo me dice que esta todo correcto...
Alguien podría decirme algun validador de xml o como puedo saber donde esta el fallo?

He contactado con ellos pero no contestan.


Un saludo.

¿El texto completo es el de "Error: El fichero de alta TicketBAI no cumple el esquema XSD. Detalle del error: cvc-complex-type.2.4.b: The content of element 'T:TicketBai' is not complete. One of '{"http://www.w3.org/2000/09/xmldsig#":Signature}' is expected" que creo que comentamos en otro post? Si sí, estás enviando sin firmar el fichero. A mi me contestaron y resulta que firmaba el fichero, lo validaba y después enviaba el fichero antes de la firma. Claro, daba este error y no lo entendía porque no me daba cuenta de que en el momento de escribir el stream a enviar utilizaba el fichero sin firmar en vez de utilizar el ya firmado...


Si no es ese el error, dinos exactamente cuál es. Supongo que tu resultado también especifique la razón de que no cumpla el esquema.



Creo que tú utilizas C#. Te paso mi clase para validar por si te sirve

Código:
public class Validaciones
{
    private bool isValid { get; set; }
    private string noValidInformation { get; set; }

    public bool ValidaXmlFactura(string xmlFile)
    {
        try
        {
            isValid = true;
            // Ficheros xsd ubicados en la raíz del ejecutable
            string xsdFile = @"ticketBaiV1-2.xsd";
            string xsdFile2 = @"xmldsig-core-schema.xsd";

            var path = new Uri(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath;
            XmlSchemaSet schema = new XmlSchemaSet();
            schema.Add("urn:ticketbai:emision", path + "\\" + xsdFile);
            schema.Add("http://www.w3.org/2000/09/xmldsig#", path + "\\" + xsdFile2);

            using (XmlReader rd = XmlReader.Create(xmlFile))
            {
                XDocument doc = XDocument.Load(rd);
                doc.Validate(schema, ValidationCallBack);
            }

            if (!isValid)
            {
                MessageBox.Show(noValidInformation.TrimEnd(Environment.NewLine.ToCharArray()), 
                    System.Reflection.MethodBase.GetCurrentMethod().Name, 
                    System.Windows.Forms.MessageBoxButtons.OK, 
                    System.Windows.Forms.MessageBoxIcon.Error);
            }
            return isValid;
        }
        catch (Exception ex)
        {
            //isValid = false; no need to say isValid=false as it returns false
            MessageBox.Show(ex.Message, 
                System.Reflection.MethodBase.GetCurrentMethod().Name, 
                System.Windows.Forms.MessageBoxButtons.OK, 
                System.Windows.Forms.MessageBoxIcon.Error);
            return false;
        }
    }

    private void ValidationCallBack(object sender, ValidationEventArgs e)
    {
        noValidInformation += string.Format("+ {0}: {1}", e.Severity.ToString(), e.Message) + Environment.NewLine;
        isValid = false;
    }
}
Responder Con Cita