 LINQ - 
Validando arquivo XML com Regex
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)
 
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a 
Objetos com VB .NET

C# - Salvando e Lendo informações em um arquivo XML - Macoratti