Cortando String XML
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
blog.mauriciojunior.org
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.