LINQ - Validando arquivo XML com Regex


 Neste artigo vou mostrar como podemos validar um arquivo XML usando expressões regulares com a LINQ e a linguagem C#.

Podemos  usar todos os recursos do LINQ e aplicar filtros usando expressões regulares para formatar e validar resultados.

Como exemplo vamos validar um arquivo XML onde temos os elementos nome e telefone.

Para isso vamos definir uma expressão regular para validar o número do telefone e exibir se o mesmo é válido (true) ou não (false).

Vamos usar como exemplo o seguinte arquivo XML chamado Clientes.xml:

<?xml version="1.0" encoding="utf-8" ?>
<clientes>
    <cliente id="1">
        <nome>Macoratti</nome>
        <Telefone>014-4604121</Telefone>
    </cliente>
    <cliente id="2">
        <nome>Jessica</nome>
        <Telefone>021-5518221</Telefone>
    </cliente>
    <cliente id="3">
        <nome>Jefferson</nome>
        <Telefone>#4abc</Telefone>
    </cliente>
</clientes>

Recursos Usados:

Criando o projeto Windows Forms

Abra o VS 2017 Community e crie um projeto usando o template Windows Classic Desktop -> Windows Forms App com o nome Linq_XML_Regex;

No formulário form1.cs padrão inclua os controles :

Definindo o código do formulário

Defina no formulário uma método estático onde vamos definir a expressão regular que vai validar o telefone para o elemento do XML:

       static XElement VerificaTelefone(string phone)
        {
            Regex regex = new Regex("([0-9]{3}-)|('('[0-9]{3}')')[0-9]{3}-[0-9]{4}");
            return new XElement("isValidTelefone", regex.IsMatch(phone));
        }

No evento Click do botão - btnCarregarXML - temos o código que vai apenas exibir o XML no TextBox - txtDados:

       private void btnCarregarXML_Click(object sender, EventArgs e)
        {
            try
            {
                XElement dadosXML = XElement.Load(@"c:\dados\Clientes.xml");
                txtDados.Text = dadosXML.ToString();
                btnValidarXML.Enabled = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao carregar XML : " + ex.Message);
            }
        }

Neste código estamos apenas carregando arquivo Clientes.xml que esta na pasta c:\dados  exibindo-o no TextBox - txtDados.

No evento Click do botão - btnValidarXML - temos o código que vai usar o método estático VerificaTelefone e vai validar o elemento <Telefone> do arquivo XML:

        private void btnValidarXML_Click(object sender, EventArgs e)
        {
            try
            {
                XDocument doc = XDocument.Load(@"c:\dados\Clientes.xml");
                this.Width = 990;
                this.Height = 438;
                var query =
                    from cliente in doc.Descendants("cliente")
                    select
                        new XElement("cliente",
                                     cliente.Descendants("nome").First(),
                                     cliente.Descendants("Telefone").First(),
                                     VerificaTelefone((string)cliente.Descendants("Telefone").First()));
                foreach (var objElement in query)
                {
                    txtXML.Text = "Nome do Cliente : " + objElement.Element("nome").Value + "\r\n";
                    txtXML.Text += "Telefone: " + objElement.Element("Telefone").Value + "\r\n";
                    txtXML.Text += "Telefone válido ? : " + objElement.Element("isValidTelefone").Value + "\r\n";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro : " + ex.Message);
            }
        }

Vamos exibir o resultado da validação no TextBox - txtXML.

Agora é só alegria...

Executando o projeto teremos o seguinte resultado:

Essa é apenas uma 'desgutação' das possibilidades da utilização de expressões regulares com consultas LINQ para validar dados.

Pegue o projeto aqui :   LinqXML_Regex.zip  (sem as referências)

"Porque Deus amou o mundo de tal maneira que deu o seu Filho unigênito, para que todo aquele que nele crê não pereça, mas tenha a vida eterna."
João 3:16

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti