Cita:
Empezado por Ramon88
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;
}
}