none
Ler o XML de um webservice RRS feed

  • Pergunta

  • Boa noite caros colegas,

    Eu tenho um webservice que retorna o seguinte XML:

    <GetServers xmlns="http://teste.teste.com.br/WebServices/">
        <Servidores xmlns="">
            <Servidor Nome="srv1" situacao="OK">
        </Servidores>
    </GetServers >
    Esse retorno é feito em uma variável do tipo XElement. Eu já vasculhei meio mundo atraz de uma forma de ler as informações do arquivo e nada.

    Por favor alguém pode me ajudar?

    segunda-feira, 3 de setembro de 2012 23:37

Respostas

  • Amigo,

    Fiz um exemplo utilizando linq, veja se adequa a sua necessidade

                string xmlContext = @"<?xml version=""1.0"" encoding=""UTF-8""?>
    <GetServers xmlns=""http://teste.teste.com.br/WebServices/"">
      <Servidores xmlns="""">
        <Servidor nome=""srv1"" Situacao=""OK"" />
      </Servidores>
    </GetServers>";
                
                XDocument xd = XDocument.Parse(xmlContext);
    
                var result = from tag in xd.Descendants("Servidores")
                                           .Descendants("Servidor") 
                    select new
                    {
                        serverName = tag.Attribute("nome").Value
                        , serverStatus = tag.Attribute("Situacao").Value
                    };
    
                foreach (var item in result)
                {
                    Console.WriteLine(
                        String.Format("Nome do Servidor: {0}\nSituação: {1}",
                            item.serverName
                            , item.serverStatus
                        )
                    );                
                }
                
                Console.Read();


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Marcado como Resposta Marcos H. Silva terça-feira, 4 de setembro de 2012 21:36
    terça-feira, 4 de setembro de 2012 01:45

Todas as Respostas

  • Amigo,

    Bem provavel que voce nao estea conseguindo ler as tag pelo fato do xml ter um namespace, no seu caso e o "http://teste.teste.com.br/WebServices/".

    Abaixo segue um exemplo que respondi algum tempo atras sobre exatamente esse problema de ler tags.

    Veja se lhe ajuda.

    http://dicarapida.wordpress.com/2011/04/29/como-recuperar-o-valor-de-um-elemento-quando-a-tag-root-do-xml-tem-namespace/


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    terça-feira, 4 de setembro de 2012 00:27
  • Oi Rodrigo,

    Cara seguinte, acho que faltou uma parte do XML, esse exemplo bacana que você me passou não funcionou.

    <GetServer xmlns="http://teste.teste.com.br/WebServices/">
      <Servidores xmlns="">
        <Servidor nome="srv1" Situacao="OK" />
      </Servidores>
    </GetServers>

    Tentei altera esse seu exemplo mas ainda sim não deu certo. Eu trabalho com desenvolvimento desde 2005, mas com o Delphi, então algumas coisas do C# ainda não meio obscuras para mim.

    Fiz um código fixando o XML para fazer um teste... e ainda sim não funcionou!
    private void analistaRetornoGetServers(object obj, webServiceServers.GetServersCompletedEventArgs e)           
       string xmlSRV = @"<?xml version=""1.0"" encoding=""UTF-8""?>
                       <GetServers xmlns=""http://teste.teste.com.br/WebServices/"">
                          <Servers xmlns="""">
                             <Server nome=""srv1"" Situacao=""OK"" />
                          </Server>
                       </Servers>"; 
    
       XDocument  xmlDoc = XDocument.Parse(xmlSRV);
       XNamespace xn     = "http://teste.teste.com.br/WebServices/";
    
       var valorElemento = xmlDoc.Root.Elements().Where(n => n.Name == (xn + "Situacao")).First().Value;
       MessageBox.Show(valorElemento);
    }



    terça-feira, 4 de setembro de 2012 01:00
  • Amigo,

    Fiz um exemplo utilizando linq, veja se adequa a sua necessidade

                string xmlContext = @"<?xml version=""1.0"" encoding=""UTF-8""?>
    <GetServers xmlns=""http://teste.teste.com.br/WebServices/"">
      <Servidores xmlns="""">
        <Servidor nome=""srv1"" Situacao=""OK"" />
      </Servidores>
    </GetServers>";
                
                XDocument xd = XDocument.Parse(xmlContext);
    
                var result = from tag in xd.Descendants("Servidores")
                                           .Descendants("Servidor") 
                    select new
                    {
                        serverName = tag.Attribute("nome").Value
                        , serverStatus = tag.Attribute("Situacao").Value
                    };
    
                foreach (var item in result)
                {
                    Console.WriteLine(
                        String.Format("Nome do Servidor: {0}\nSituação: {1}",
                            item.serverName
                            , item.serverStatus
                        )
                    );                
                }
                
                Console.Read();


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    • Marcado como Resposta Marcos H. Silva terça-feira, 4 de setembro de 2012 21:36
    terça-feira, 4 de setembro de 2012 01:45
  • Rapaz funcionou perfeitamente!!! Muito obrigado pela ajuda, a coisa deslanchou agora... assim que ficar pronto vou colocar no ar, com um agradecimento a ti.

    Muito obrigado mesmo.

    terça-feira, 4 de setembro de 2012 21:50