<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Title="Validador SAFT-PT" ValidateRequest="false" EnableEventValidation="false" ViewStateEncryptionMode="Never" %> <script runat="server"> protected string erro = ""; protected bool valido = true; protected string resultado = ""; private string pagina = "validador.aspx"; protected void btn_validar_Click(object sender, EventArgs e) { erro = ""; valido = true; resultado = ""; lbl_resultado.Text = ""; lbl_erros.Text = ""; bool ficheiro_texto = flp_ficheiro.HasFile; if (ficheiro_texto) { if(!flp_ficheiro.FileName.ToLower().EndsWith(".xml")) { lbl_erros.Text = string.Format("<span style=\"color:#FF0000\">Seleccione um documento válido do tipo XML (*.xml).</span>"); return; } } else if(txt_xmlsaft.Text == "") { lbl_erros.Text = string.Format("<span style=\"color:#FF0000\">Seleccione um ficheiro ou texto.</span>"); return; } try { System.IO.StringReader str_xml_string_reader = new System.IO.StringReader(txt_xmlsaft.Text); System.IO.Stream str_xml_stream = flp_ficheiro.FileContent; string url_xsl = string.Format("http://www.saftpt.com/docs/saf-t-pt.xsd", HttpContext.Current.Request.Url.AbsoluteUri.Replace(pagina, "")); string url_xsl_new = string.Format("http://www.saftpt.com/docs/saftpt_1_01.xsd", HttpContext.Current.Request.Url.AbsoluteUri.Replace(pagina, "")); // XmlSchemaSet System.Xml.Schema.XmlSchemaSet sc = new System.Xml.Schema.XmlSchemaSet(); if (rbl_tipo_validacao.SelectedItem.Value == "Schema") sc.Add("urn:OECD:StandardAuditFile-Tax:PT_1.00_01", url_xsl); else sc.Add("urn:OECD:StandardAuditFile-Tax:PT_1.01_01", url_xsl_new); //validation settings System.Xml.XmlReaderSettings settings = new System.Xml.XmlReaderSettings(); settings.ProhibitDtd = false; // internet explorer error settings.ValidationType = (rbl_tipo_validacao.SelectedItem.Value == "Schema" || rbl_tipo_validacao.SelectedItem.Value == "NewSchema") ? System.Xml.ValidationType.Schema : System.Xml.ValidationType.None; settings.Schemas = sc; settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(ValidationCallBack); //XmlReader System.Xml.XmlReader reader; reader = (ficheiro_texto) ? System.Xml.XmlReader.Create(str_xml_stream, settings) : System.Xml.XmlReader.Create(str_xml_string_reader, settings); //Restrição do elemento de topo if (!reader.IsStartElement("AuditFile")) { Exception ex1 = new Exception(@"Elemento de topo inválido.O ficheiro xml deverá inicial com o elemento:""AuditFile"""); throw ex1; } //Percorre o ficheiro while (reader.Read()); reader.Close(); if (valido) resultado = string.Format("Documento válido em {0} por {1}", settings.ValidationType.ToString().Replace("None", "XML"), (ficheiro_texto ? "ficheiro" : "texto")); else resultado = string.Format("Documento não válido em {0} por {1}", settings.ValidationType.ToString().Replace("None", "XML"), (ficheiro_texto ? "ficheiro" : "texto")); lbl_resultado.Text = resultado; lbl_erros.Text = erro; } catch(Exception e1) { lbl_resultado.Text = ""; lbl_erros.Text = string.Format("<span style=\"color:#FF0000\">Erro no validador</span>:</br>{0}</br><span style=\"color:#00CE18\">Teste o validador utilizando outros browsers Internet Explorer | Firefox | Opera </span>", e1.Message); } } private void ValidationCallBack(object sender, System.Xml.Schema.ValidationEventArgs e) { valido = false; erro += string.Format("Erro:{0} Linha: {1} Posição: {2}.<br />", e.Message, e.Exception.LineNumber, e.Exception.LinePosition); } </script> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <h2>Validador SAFTPT.com</h2> <fieldset title="Validador SAFTPT.com"> <legend title="Validador SAFTPT.com">Validador de Ficheiros SAFT PT</legend> <table width="100%"> <tr> <td>Tipo de validação:</td> <td> <asp:RadioButtonList ID="rbl_tipo_validacao" runat="server" RepeatColumns="1"> <asp:ListItem Selected="True" Value="Schema">Schema SAFT-PT (SAF-T-PT.XSD)</asp:ListItem> <asp:ListItem Value="NewSchema">Schema SAFT-PT (SAFTPT_1_01.xsd)</asp:ListItem> <asp:ListItem Value="XML">XML</asp:ListItem> </asp:RadioButtonList></td> </tr> <tr> <td valign="top"><b>Por ficheiro ou texto:</b></td> <td> <asp:FileUpload ID="flp_ficheiro" runat="server"/></td> </tr> <tr> <td valign="top"> </td> <td> <asp:TextBox ID="txt_xmlsaft" runat="server" Columns="55" Rows="12" SkinID="multilinha0" TextMode="MultiLine"/></td> </tr> <tr> <td valign="top"> </td> <td> <asp:Button ID="btn_validar" runat="server" Text="Validar" OnClick="btn_validar_Click"/> <asp:Label ID="lbl_resultado" runat="server" CssClass="notas0"/></td> </tr> <tr> <td colspan="2"> <asp:Label ID="lbl_erros" runat="server"/> </td> </tr> </table> </fieldset> <br /> <div class="texto"> <p class="bottom"> <br /></p> </div> </asp:Content>