none
Obter valores de uma string RRS feed

  • Pergunta

  • Bom dia,

    Estou desenvolvendo um aplicativo que recebe uma string de um aplicativo servidor onde este contem N arquivos XML dentro. Ou seja, transfere via socket um conjunto de arquivos XML em forma de string.

    O que estou precisando e não estou conseguindo fazer e nem encontrar na internet, é como obter o conteudo entre as tags <?xml version="1.0" ?> e </TeleEvento>, onde a <?xml version="1.0" ?> é a primeira tag abrindo o XML e a </TeleEvento> é a ultima tag, fechando assim um arquivo XML e posteriormente outro é aberto.

    Lembrando que os dados vem todos junto na mesma string, ou seja, pode haver 10 arquivos XML dentro da string e tenho que separar cada um deles, criando 10 arquivos XML distintos.

    quarta-feira, 27 de fevereiro de 2013 14:27

Respostas

  • amigo, 

    verifica se o seu método que faz a recepção do buffer do server, está tratando caso o tamanho do arquivo seja maior que o tamanho da sua taxa de transferência para download, se for, você vai ter que  fazer o tratamento para ele ir  concatenando as strings baixadas... entende ?

    procure sobre CRC 

    http://www.macoratti.net/12/01/c_crc1.htm

    que é onde define se a string está correta!

    abraços !

    • Marcado como Resposta Bruno (Sylis) quarta-feira, 8 de maio de 2013 16:56
    sexta-feira, 1 de março de 2013 13:57

Todas as Respostas

  • Olá Bruno

    um jeito simples de pegar o valor é via expressão regular

    ''' <summary>
    ''' Retorna o Valor de uma Tag
    ''' </summary>
    ''' <param name="xml"></param>
    ''' <param name="tag"></param>
    ''' <returns></returns>
    Public Shared Function GetValueTag(Xml As String, Tag As String) As String
    	Dim _Regex As New Regex("<" & Tag & "\b[^>]*>(.*?)</" & Tag & ">")
    	Dim vl As Match = _Regex.Match(Xml)
    
    	Return vl.Value.Replace("</" & Tag & ">", String.Empty).Replace("<" & Tag & ">", String.Empty).Trim()
    
    End Function

    ou um link do macoratti para ler xml

    http://www.macoratti.net/10/08/vbn_xml1.htm

    Abraços Amigo !

    Afonso Fernandes

    quarta-feira, 27 de fevereiro de 2013 14:37
  • Afonso,

    Neste exemplo seu, o que significa estes simbolos?

    \b[^>]*>(.*?)

    quarta-feira, 27 de fevereiro de 2013 19:12
  • a lógica seria:

    (.*?) - > qualquer valor

    \b[^>]* -> tag dos atributos.

    funcionou amigo ?

    Abraços !

    quarta-feira, 27 de fevereiro de 2013 19:17
  • Até funcionou, porém ele agrupou todos os valores, porém o que eu preciso seria o seguinte.

    <xml>

    primeiro arquivo

    </xml>

    <xml>

    segundo arquivo

    </xml>

    <xml>

    terceiro arquivo

    </xml>

    <xml>

    N arquivo

    </xml>

    Com o código que você me passou, ele junta todos os dados que estão entre as tag e como as tags são as mesmas, ele junta tudo.

    Não sei se tem algum jeito de fazer assim, pega o conteudo que esta entre as primeiras tag <xml> </xml> copia e apaga. Ai executo de novo em um loop, ai ele pega de novo o primeiro <xml> </xml> que no caso do documento inteiro é o segundo mas como já foi recortado anteriormente, ai ele é o primeiro.

    Não sei se você conseguiu entender.

    quarta-feira, 27 de fevereiro de 2013 19:41
  • que tal um split por </xml> 

    ai ele vai formar um vetor com seus arquivos xml e apartir dai, você faz um for no seu vetor usando o método ali e pegar as tags dos xmls independentemente.. saco ?

    String[] VariosXmls...

    não sei se te ajuda... pelo que entendi acho que resolve... algo próximo disso, talvez re-colocar o </xml> no final de cada item das String, caso remover... 

    entende ?

    quarta-feira, 27 de fevereiro de 2013 19:54
  • Vo tentar aqui o que você falou.
    • Sugerido como Resposta Afonso Fernandes quarta-feira, 27 de fevereiro de 2013 20:07
    • Não Sugerido como Resposta Afonso Fernandes quarta-feira, 27 de fevereiro de 2013 20:07
    quarta-feira, 27 de fevereiro de 2013 19:56
  • Vo tentar aqui o que você falou.

    cliquei errado rsrs, 

    vai lá  e me fala se deu certo =D

    quarta-feira, 27 de fevereiro de 2013 20:07
  • Bom dia Afonso,

    Realizei aqui o comando e fiz alguns testes.

    Porém a string não está vindo completa. Não sei se na recepção dos dados está cortando, mas o tamanho do buffer coloquei 65536 e também não sei se é a String.

    Saberia o que pode estar ocorrendo?

    sexta-feira, 1 de março de 2013 13:09
  • amigo, 

    verifica se o seu método que faz a recepção do buffer do server, está tratando caso o tamanho do arquivo seja maior que o tamanho da sua taxa de transferência para download, se for, você vai ter que  fazer o tratamento para ele ir  concatenando as strings baixadas... entende ?

    procure sobre CRC 

    http://www.macoratti.net/12/01/c_crc1.htm

    que é onde define se a string está correta!

    abraços !

    • Marcado como Resposta Bruno (Sylis) quarta-feira, 8 de maio de 2013 16:56
    sexta-feira, 1 de março de 2013 13:57