none
validar xml através de um xsd

    Question

  • Olá a todos,

    Tenho um arquivo xml e ja criei o arquivo xsd para validar a estrutura de meu xml, porem a implementação que fiz não obtive sucesso.
    Basiei-me no seguinte artigo: http://www.macoratti.net/07/11/vbn5_vxl.htm

    Para testar coloquei um arquivo xml de estrutura bem diferente e mesmo assim validou com sucesso.

    Se tiverm algum outro artigo que possam me indicar ajudaria muito.

    Desde ja obrigado pela ajuda.
    Monday, March 08, 2010 7:29 PM

Answers

  • Siga essa estrutura:

    1-Crie esse método:
        //ValidationEventHandler
        private void ERRO_VALIDACAO_XML(object sender, ValidationEventArgs arguments)
        {
            ViewState["BOOL_XML_VALIDO"] = false;
            ViewState["STR_ERRO_XML"] = arguments.Message;
        }
     

    2-Valide o XML assim:
                 //Aqui carrega o XML para o MemoryStream.
                 MemoryStream objMemoryStream = new MemoryStream(ASCIIEncoding.Default.GetBytes(XML));
                 XmlDocument objXMLDocument = new XmlDocument();
                //Cria o objeto XML
                objXMLDocument.Load(objMemoryStream);
                //Adicione o XSD para o seu obejto XML
                objXMLDocument.Schemas.Add(null, Server.MapPath("SEU_ARQUIVO_XSD.xsd"));
                //Preparando para validar
                ValidationEventHandler objValidaXML = new ValidationEventHandler(ERRO_VALIDACAO_XML);
                ViewState["BOOL_XML_VALIDO"] = true;
                //Executando validação
                objXMLDocument.Validate(objValidaXML);
                //Verifique se validou corretamente ou não com um simples IF
                if (ViewState["BOOL_XML_VALIDO"] == true)
                {//XML enviado é válido

                }
                else
                {//XML enviado inválido

                 }

    Monday, March 08, 2010 7:37 PM

All replies

  • Veja
    private
     void
     ValidatingProcess(string
     XSDPath, string
     XMLPath)
    {
        try
        {
            // 1- Read XML file content
            this .Reader =  new XmlTextReader(XMLPath);
     
            // 2- Read Schema file content
            StreamReader SR =  new  StreamReader(XSDPath);
     
            // 3- Create a new instance of XmlSchema object
            XmlSchema Schema =  new  XmlSchema();
            // 4- Set Schema object by calling XmlSchema.Read() method
            Schema =  XmlSchema.Read(SR, 
                new ValidationEventHandler(ReaderSettings_ValidationEventHandler)); 
     
            // 5- Create a new instance of XmlReaderSettings object
            XmlReaderSettings ReaderSettings =  new XmlReaderSettings();    
            // 6- Set ValidationType for XmlReaderSettings object
            ReaderSettings.ValidationType = ValidationType.Schema;                
            // 7- Add Schema to XmlReaderSettings Schemas collection
            ReaderSettings.Schemas.Add(Schema); 
     
            // 8- Add your ValidationEventHandler address to
            // XmlReaderSettings ValidationEventHandler
            ReaderSettings.ValidationEventHandler +=
                new ValidationEventHandler(ReaderSettings_ValidationEventHandler);
     
            // 9- Create a new instance of XmlReader object
            XmlReader objXmlReader =  XmlReader.Create(Reader, ReaderSettings);
     
     
            // 10- Read XML content in a loop
            while  (objXmlReader.Read())
            { /*Empty loop*/
     
        }//try
        // Handle exceptions if you want
        catch  (UnauthorizedAccessException AccessEx)
        {
            throw  AccessEx;
        }//catch
        catch  (Exception Ex)
        {
            throw  Ex;
        }//catch
    }
     
    private  void ReaderSettings_ValidationEventHandler(object  sender, 
        ValidationEventArgs args)
    {
        // 11- Implement your logic for each validation iteration
        string  strTemp;
        strTemp =  "Line: "  + this .Reader.LineNumber +  " - Position: "  
            +  this .Reader.LinePosition +  " - "  +  args.Message; 
     
        this .Results.Add(strTemp);
    }
    Monday, March 08, 2010 7:33 PM
  • Siga essa estrutura:

    1-Crie esse método:
        //ValidationEventHandler
        private void ERRO_VALIDACAO_XML(object sender, ValidationEventArgs arguments)
        {
            ViewState["BOOL_XML_VALIDO"] = false;
            ViewState["STR_ERRO_XML"] = arguments.Message;
        }
     

    2-Valide o XML assim:
                 //Aqui carrega o XML para o MemoryStream.
                 MemoryStream objMemoryStream = new MemoryStream(ASCIIEncoding.Default.GetBytes(XML));
                 XmlDocument objXMLDocument = new XmlDocument();
                //Cria o objeto XML
                objXMLDocument.Load(objMemoryStream);
                //Adicione o XSD para o seu obejto XML
                objXMLDocument.Schemas.Add(null, Server.MapPath("SEU_ARQUIVO_XSD.xsd"));
                //Preparando para validar
                ValidationEventHandler objValidaXML = new ValidationEventHandler(ERRO_VALIDACAO_XML);
                ViewState["BOOL_XML_VALIDO"] = true;
                //Executando validação
                objXMLDocument.Validate(objValidaXML);
                //Verifique se validou corretamente ou não com um simples IF
                if (ViewState["BOOL_XML_VALIDO"] == true)
                {//XML enviado é válido

                }
                else
                {//XML enviado inválido

                 }

    Monday, March 08, 2010 7:37 PM