Olá pessoal,hoje gostaria de publicar e mostrar, apenas para registro, como funciona cortaruma string XML e retornar todos os dados de uma tag, mesmo que tenha sidorepetida.

 

Requisito:

Linguagem C#.NET

Plataforma:Windows Forms ou Web Forms

Framework: .NET3.5

Ferramenta dedesenvolvimento: Visual Studio .NET 2008

 

            Pessoal, mesmo desenvolvendo com alinguagem, ferramenta e framework acima citados, vocĂŞ pode colocar o mĂ©todo doartigo em qualquer framework ou ferramenta de desenvolvimento anterior a 2008,que vai funcionar perfeitamente.

 

Objetivo

            Qual o objetivo do artigo? Éfacilitar ao desenvolvedor cortar string em XML, e trazer apenas a tagesperada, mesmo que sejam repetidos; os dados serĂŁo trazidos e acoplados. Porexemplo: (Cod 1.1)

 

 

<principal>

   <cliente>

       <nome>teste</nome>

       <data>12/02/2009</data>

   </cliente>

   <sistema>

       <versao>1.2</versao>

       <codigo>2A</codigo>

   </sistema>

   <cliente>

       <nome>teste 2</nome>

       <data>12/02/2010</data>

   </cliente>

   

Code 1.1

 

            Caso vocĂŞ tenha um XML gravado nobanco de dados e em certo momento, retorna ele em tela, sĂł que Ă© necessárioapenas pegar a tag <cliente>, todas as tags mesmo se estiver repetida emlugares separados.

            EntĂŁo, melhor usar um mĂ©todoespecĂ­fico e simples, mas que tomou um pouco de tempo no desenvolvimentocorreto.

 

CĂłdigo

 

        /// <summary>

        /// MĂ©todo que corta a string dinâmicamente

        /// Retorna apenas a string, se tiver mais que uma, ele já faz o loop

        /// automaticamente.

        /// </summary>

        /// <param name="result">string</param>

        /// <param name="tagInicio">strnig</param>

        /// <param name="tagFim">string</param>

        /// <returns>String</returns>

        private String CortarString(string result, string tagInicio, string tagFim)

        {

            //retorna essa variavel final

            string resultadoFinal = "";

 

            int posicaoinicio = result.IndexOf(tagInicio);

            int posicaofim = result.IndexOf(tagFim);

 

            if (posicaoinicio > -1 && posicaofim > -1)

            {

                posicaofim += tagFim.Length;

 

                if (posicaoinicio > posicaofim)

                    posicaofim = posicaoinicio - posicaofim;

                else

                    posicaofim = posicaofim - posicaoinicio;

 

                string resultado = result.Substring(posicaoinicio, posicaofim);

                resultadoFinal += resultado;

 

                //corta a tag

                result = result.Replace(resultado, "");

 

                //se tiver a tag ele busca novamente chamando o mĂ©todo

                if (result.IndexOf(tagInicio) > 0)

                    resultadoFinal += CortarString(result, tagInicio, tagFim);

            }

            else

                resultadoFinal = "";

 

            return resultadoFinal;

        }

Code 1.2

 

            No [Code 1.2] mostro o mĂ©todo quecorta string XML corretamente. Pra isso basta enviar a string toda e a taginicial e tag final. Code 1.3

 

 

String resultadoFinal = CortarString(string result, string tagInicio, string tagFim)

 

Code 1.3

 

            Comofalado no exemplo [Code 1.1], imagine que eu queira cortar a tag chamada <cliente>. Para isso, armazenotodo o meu retorno em uma variável string e passo para o mĂ©todo e as tags quepreciso dos dados. Code 1.4

 

 

String result = string resultado = "<NomeDocumentos112><Tamanho>097</Tamanho><TipoRegistro>112</TipoRegistro><Nome>teste</Nome><DataNascimento>00000000</DataNascimento><CPF>12345678900</CPF><RG>123456</RG><OutroDocumento>1</OutroDocumento></NomeDocumentos112><ConsultasAnteriores125><Tamanho>064</Tamanho><TipoRegistro>125</TipoRegistro><TipoCredito>CH</TipoCredito><DataCredito>24022010</DataCredito><Moeda/><Valor>00000000000</Valor><Informante>CODIGODETESTE</Informante></ConsultasAnteriores125><Cliente><Tamanho>104</Tamanho><TipoRegistro>211</TipoRegistro><TipoOcorrencia>1</TipoOcorrencia><TipoDocumento>1</TipoDocumento><NumeroDocumento>00000012413895</NumeroDocumento><Banco>237</Banco><Agencia>0099</Agencia><ContaCorrente>104</ContaCorrente><Cheque>211</Cheque><Alinea>21</Alinea><DataOcorrencia>12082009</DataOcorrencia><DataDisponibilizacao>25082009</DataDisponibilizacao><Informante>CASABAHIACOMERCIALLTDA</Informante><Indicador>4</Indicador></Cliente><Cliente><Tamanho>104</Tamanho><TipoRegistro>211</TipoRegistro><TipoOcorrencia>1</TipoOcorrencia><TipoDocumento>1</TipoDocumento><NumeroDocumento>00000901064823</NumeroDocumento><Banco>237</Banco><Agencia>0099</Agencia><ContaCorrente>104</ContaCorrente><Cheque>211</Cheque><Alinea>28</Alinea><DataOcorrencia>01012006</DataOcorrencia><DataDisponibilizacao>08082006</DataDisponibilizacao><Informante>RJ-MTIEMPRESADETESTEDOUNPJCADAS</Informante><Indicador>4</Indicador></Cliente>";

 

String resultadoFinal = CortarString(string result, “<cliente>”, “</cliente>”)

 

Code 1.5

 

            Oresultado final será todo o conjunto de dados dentro da tag <cliente> doseu xml armazenada em sua variável resultadoFinal.Funciona perfeitamente para quem gostaria de cortar arquivo XML.

            Bom, eu fico por aqui e qualquerdĂşvida, pode entrar em contato pelo site.

 

Mauricio Junior

www.mauriciojunior.org

blog.mauriciojunior.org