Function to validate xml

Asked

Viewed 163 times

3

I have this function to validate an xml:

public static bool ValidarXML(string pathXML, string pathSchema, ref string retorno)
    {
        bool falhou;

        // Define o tipo de validação
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.ValidationType = ValidationType.Schema;
        // Carrega o arquivo de esquema
        XmlSchemaSet schemas = new XmlSchemaSet();
        settings.Schemas = schemas;
        // Quando carregar o eschema, especificar o namespace que ele valida
        // e a localização do arquivo 
        schemas.Add(null, pathSchema);
        // Especifica o tratamento de evento para os erros de validacao
        // settings.ValidationEventHandler += ValidationEventHandler;
        // cria um leitor para validação
        XmlReader validator = XmlReader.Create(pathXML, settings);
        falhou = false;
        try
        {
            // Faz a leitura de todos os dados XML
            while (validator.Read()) { }
        }
        catch (XmlException err)
        {
            // Um erro ocorre se o documento XML inclui caracteres ilegais
            // ou tags que não estão aninhadas corretamente
            retorno = "Ocorreu um erro critico durante a validação do XML: " + err.Message;
            falhou = true;
        }
        finally
        {
            validator.Close();
            retorno = "Arquivo validado com sucesso";
        }
        return !falhou;
    }

However I am trying to pass the file, and is returning me error:

 ValidarXML("E:\\nota.xml", typeof(tcNfse), ref a);

The schema in the case is the typeof(tcNfse) It returns the following error:

cannot convert from "System.Type" to "string"

As in the comments, I was able to solve this error above by adding the suggestion:

ValidarXML("E:\\nota.xml", nameof(tcNfse), ref a);

But he says he can’t find the tcNfse, he is looking for the file inside the project, in case I have to pass the location of the file, is it ? instead of it inside the program?

  • (string pathXML, string pathSchema, ref string retorno) just look at the signature, where the second parameter needs to be a string !!! understood the problem?

  • @Virgilionovic I understood, but do not know how to fix, pass the schema as string.

  • maybe a nameOf(tcNfse) solve, maybe I don’t know how to try !!! like ValidarXML("E:\\nota.xml", nameOf(tcNfse), ref a);

  • 1

    @Virgilionovic I’m trying to get through but he says he can’t find, Could not find file 'E: ERP Erp tcNfse'. schema is in the project, the xsd file, all right, would it be right to pass the path, and not the tcNfse?

  • So I do not know the purpose of the method ... just pointed out the problem reported by the exception generated

  • 1

    @Virgilionovic, I’m going to do a little more digging, see if I can sort it out, thanks for the time being.

  • I did it this way: ValidarXML("E:\\nota.xml", "E:\\xmldsig-core-schema20020212.xsd", ref a); and I managed to fix it. Here’s a tip for those who have the same problem.

Show 2 more comments
No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.