none
Separar tags XML em C# RRS feed

  • Pergunta

  • Pessoal boa tarde,

    seguinte queria ver se algum sabio poderia me ajudar

    eu tenho um arquivo xml:

    <testnode>
        <unidade202>
            <element1>Torre 2 - Aurora</element1>
            <element2>Unidade 202</element2>
            <element3>Etapa 1 - Cadastro Ok</element3>
            <element4>Hora Inicio - 21:45</element4>
            <element5>Imobiliaria - Abyara</element5>
            <element6>Corretor - Joao </element6>
            <element7>Gerente - Vanessa</element7>
            <element8>Cliente - Joaquin</element8>
        </unidade202>
        <unidade101>
            <element1>Torre 2 - Aurora</element1>
            <element2>Unidade 202</element2>
            <element3>Etapa 1 - Cadastro Ok</element3>
            <element4>Hora Inicio - 21:45</element4>
            <element5>Imobiliaria - Abyara</element5>
            <element6>Corretor - Joao </element6>
            <element7>Gerente - Vanessa</element7>
            <element8>Cliente - Joaquin</element8>
        </unidade101>
    </testnode>


    e gostaria de separar as informaçoes que estao contidas nele em 2 (ou mais group box)
    no caso eu ja abri o xml e printei ele no primeiro group mais
    tipo assim eu queria mandar as infos contidas na unidade202 em um e unidade101 e outro

    alguem poderia me indicar o caminho??
    Abraços
    segunda-feira, 5 de dezembro de 2011 19:55

Respostas

  • Bom nao sei se seria a melhor formar, mais fica a dica:

    string xml =
                @"<testnode>
                    <unidade202>
                        <element1>Torre 2 - Aurora</element1>
                        <element2>Unidade 202</element2>
                        <element3>Etapa 1 - Cadastro Ok</element3>
                        <element4>Hora Inicio - 21:45</element4>
                        <element5>Imobiliaria - Abyara</element5>
                        <element6>Corretor - Joao </element6>
                        <element7>Gerente - Vanessa</element7>
                        <element8>Cliente - Joaquin</element8>
                    </unidade202>
                    <unidade101>
                        <element1>Torre 2 - Aurora</element1>
                        <element2>Unidade 202</element2>
                        <element3>Etapa 1 - Cadastro Ok</element3>
                        <element4>Hora Inicio - 21:45</element4>
                        <element5>Imobiliaria - Abyara</element5>
                        <element6>Corretor - Joao </element6>
                        <element7>Gerente - Vanessa</element7>
                        <element8>Cliente - Joaquin</element8>      
                    </unidade101>
                    <unidade103>
                        <element1>Torre 2 - Aurora</element1>
                        <element2>Unidade 202</element2>
                        <element3>Etapa 1 - Cadastro Ok</element3>
                        <element4>Hora Inicio - 21:45</element4>
                        <element5>Imobiliaria - Abyara</element5>
                        <element6>Corretor - Joao </element6>
                        <element7>Gerente - Vanessa</element7>
                        <element8>Cliente - Joaquin</element8>      
                    </unidade103>
                </testnode>";
    
    var xDoc = XDocument.Parse(xml);
    
    var resultado = xDoc.DescendantNodes()
        .Where(c => c.ToString().Contains("<unidade") && !c.ToString().Contains("<testnode"))
        .Cast<XElement>()
        .Select(c => new
            {
                Unidade = c.Name.LocalName,
                Element1 = c.Descendants("element1").First().Value,
                Element2 = c.Descendants("element2").First().Value,
                Element3 = c.Descendants("element3").First().Value,
                Element4 = c.Descendants("element4").First().Value,
                Element5 = c.Descendants("element5").First().Value,
                Element6 = c.Descendants("element6").First().Value,
                Element7 = c.Descendants("element7").First().Value,
                Element8 = c.Descendants("element8").First().Value
    
            }).ToList();
    


    Use o método .Load() para carregar o xml a partir de um caminho.
     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    segunda-feira, 5 de dezembro de 2011 20:48
  • Procure estudar um pouco depois sobre LINQ to XML e Extesion Methods + expressoes lambdas, para min tambem foi dificil no inicio, mais fico super feliz de ter sido autodidata e aprendido sozinho, coloquei alguns comentarios, espero que entenda:

    //Usando método estatico da classe XDocument para transformar um string em XML
    //Caso queira carregar um XMl a partir de um caminho use o método .Load()
    //Exemplo: 
    //XDocument xDoc = XDocument.Load(@"C:\arquivo.xml");
    
    XDocument xDoc = XDocument.Parse(xml);
    
    var resultado = 
        //Recuperando todos os nós do XML
        xDoc.DescendantNodes()
        //Selecionando os nós aonde possui <unidade e não contenha <testnode
        //No caso ele só me retornou os nós <unidad101>,<unidade103> e <unidade202> e seus elementos
        //Isso me retornou um IEnumerable<T> do tipo XNode ou seja isso IEnumerable<XNode>
        .Where(c => c.ToString().Contains("<unidade") && !c.ToString().Contains("<testnode"))
        //Fiz um cast do dos elementos desta minha fonte de XNod para XElement, para pode usar os métodos
        //Descendants e a propriedade .Value
        .Cast<XElement>()
        //Criando tipo anonimos de acordo com os elementos
        .Select(c => new
            {
                Unidade = c.Name.LocalName,
                Element1 = c.Descendants("element1").First().Value,
                Element2 = c.Descendants("element2").First().Value,
                Element3 = c.Descendants("element3").First().Value,
                Element4 = c.Descendants("element4").First().Value,
                Element5 = c.Descendants("element5").First().Value,
                Element6 = c.Descendants("element6").First().Value,
                Element7 = c.Descendants("element7").First().Value,
                Element8 = c.Descendants("element8").First().Value
    
            });
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 6 de dezembro de 2011 12:53
  • Utilize do seguintes namespace:

    using System.Linq
    using System.Xml.Linq

    Sugiro você dar um lida nos capitulos 3 (Introduction LINQ) e e capitulo 5 (LINQ to XML) do livro MCTS Self-Paced Training Kit (Exam 70-516): Accessing Data with Microsoft® .NET Framework 4 


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 6 de dezembro de 2011 13:15

Todas as Respostas

  • Pessoal boa tarde,

    seguinte queria ver se algum sabio poderia me ajudar

    eu tenho um arquivo xml:

    <testnode>
        <unidade202>
            <element1>Torre 2 - Aurora</element1>
            <element2>Unidade 202</element2>
            <element3>Etapa 1 - Cadastro Ok</element3>
            <element4>Hora Inicio - 21:45</element4>
            <element5>Imobiliaria - Abyara</element5>
            <element6>Corretor - Joao </element6>
            <element7>Gerente - Vanessa</element7>
            <element8>Cliente - Joaquin</element8>
        </unidade202>
        <unidade101>
            <element1>Torre 2 - Aurora</element1>
            <element2>Unidade 202</element2>
            <element3>Etapa 1 - Cadastro Ok</element3>
            <element4>Hora Inicio - 21:45</element4>
            <element5>Imobiliaria - Abyara</element5>
            <element6>Corretor - Joao </element6>
            <element7>Gerente - Vanessa</element7>
            <element8>Cliente - Joaquin</element8>
        </unidade101>
    </testnode>


    e gostaria de separar as informaçoes que estao contidas nele em 2 (ou mais group box)
    no caso eu ja abri o xml e printei ele no primeiro group mais
    tipo assim eu queria mandar as infos contidas na unidade202 em um e unidade101 e outro

    alguem poderia me indicar o caminho??
    Abraços
    segunda-feira, 5 de dezembro de 2011 19:52
  • Bom nao sei se seria a melhor formar, mais fica a dica:

    string xml =
                @"<testnode>
                    <unidade202>
                        <element1>Torre 2 - Aurora</element1>
                        <element2>Unidade 202</element2>
                        <element3>Etapa 1 - Cadastro Ok</element3>
                        <element4>Hora Inicio - 21:45</element4>
                        <element5>Imobiliaria - Abyara</element5>
                        <element6>Corretor - Joao </element6>
                        <element7>Gerente - Vanessa</element7>
                        <element8>Cliente - Joaquin</element8>
                    </unidade202>
                    <unidade101>
                        <element1>Torre 2 - Aurora</element1>
                        <element2>Unidade 202</element2>
                        <element3>Etapa 1 - Cadastro Ok</element3>
                        <element4>Hora Inicio - 21:45</element4>
                        <element5>Imobiliaria - Abyara</element5>
                        <element6>Corretor - Joao </element6>
                        <element7>Gerente - Vanessa</element7>
                        <element8>Cliente - Joaquin</element8>      
                    </unidade101>
                    <unidade103>
                        <element1>Torre 2 - Aurora</element1>
                        <element2>Unidade 202</element2>
                        <element3>Etapa 1 - Cadastro Ok</element3>
                        <element4>Hora Inicio - 21:45</element4>
                        <element5>Imobiliaria - Abyara</element5>
                        <element6>Corretor - Joao </element6>
                        <element7>Gerente - Vanessa</element7>
                        <element8>Cliente - Joaquin</element8>      
                    </unidade103>
                </testnode>";
    
    var xDoc = XDocument.Parse(xml);
    
    var resultado = xDoc.DescendantNodes()
        .Where(c => c.ToString().Contains("<unidade") && !c.ToString().Contains("<testnode"))
        .Cast<XElement>()
        .Select(c => new
            {
                Unidade = c.Name.LocalName,
                Element1 = c.Descendants("element1").First().Value,
                Element2 = c.Descendants("element2").First().Value,
                Element3 = c.Descendants("element3").First().Value,
                Element4 = c.Descendants("element4").First().Value,
                Element5 = c.Descendants("element5").First().Value,
                Element6 = c.Descendants("element6").First().Value,
                Element7 = c.Descendants("element7").First().Value,
                Element8 = c.Descendants("element8").First().Value
    
            }).ToList();
    


    Use o método .Load() para carregar o xml a partir de um caminho.
     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    segunda-feira, 5 de dezembro de 2011 20:48
  • Danilo veja este thread, creio eu que é a mesma duvida:

    http://social.msdn.microsoft.com/Forums/pt-BR/clientept/thread/066ba297-132f-44ea-99dd-3fe386b36c37 
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 6 de dezembro de 2011 00:17
  • Vitor Obrigado pela resposta

    estou iniciando no C# comercialmente aonde so tinha experiencias academicas

    voce poderia me explicar alguns pontos do codigo por gentileza

    como a partir disso eu posso carregar labels diferentes?

     

    VLW

    terça-feira, 6 de dezembro de 2011 11:14
  • essas duas variaveis

    Xdocument

    e Xelement nao foram inicializadas

    o que seria elas??

    terça-feira, 6 de dezembro de 2011 11:24
  • Procure estudar um pouco depois sobre LINQ to XML e Extesion Methods + expressoes lambdas, para min tambem foi dificil no inicio, mais fico super feliz de ter sido autodidata e aprendido sozinho, coloquei alguns comentarios, espero que entenda:

    //Usando método estatico da classe XDocument para transformar um string em XML
    //Caso queira carregar um XMl a partir de um caminho use o método .Load()
    //Exemplo: 
    //XDocument xDoc = XDocument.Load(@"C:\arquivo.xml");
    
    XDocument xDoc = XDocument.Parse(xml);
    
    var resultado = 
        //Recuperando todos os nós do XML
        xDoc.DescendantNodes()
        //Selecionando os nós aonde possui <unidade e não contenha <testnode
        //No caso ele só me retornou os nós <unidad101>,<unidade103> e <unidade202> e seus elementos
        //Isso me retornou um IEnumerable<T> do tipo XNode ou seja isso IEnumerable<XNode>
        .Where(c => c.ToString().Contains("<unidade") && !c.ToString().Contains("<testnode"))
        //Fiz um cast do dos elementos desta minha fonte de XNod para XElement, para pode usar os métodos
        //Descendants e a propriedade .Value
        .Cast<XElement>()
        //Criando tipo anonimos de acordo com os elementos
        .Select(c => new
            {
                Unidade = c.Name.LocalName,
                Element1 = c.Descendants("element1").First().Value,
                Element2 = c.Descendants("element2").First().Value,
                Element3 = c.Descendants("element3").First().Value,
                Element4 = c.Descendants("element4").First().Value,
                Element5 = c.Descendants("element5").First().Value,
                Element6 = c.Descendants("element6").First().Value,
                Element7 = c.Descendants("element7").First().Value,
                Element8 = c.Descendants("element8").First().Value
    
            });
    

     
    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 6 de dezembro de 2011 12:53
  • Ficou Muito claro velho obrigado

    so ficou uma duvida quais foram as bibliotecas (namespaces) que foram usados?

    terça-feira, 6 de dezembro de 2011 13:05
  • Utilize do seguintes namespace:

    using System.Linq
    using System.Xml.Linq

    Sugiro você dar um lida nos capitulos 3 (Introduction LINQ) e e capitulo 5 (LINQ to XML) do livro MCTS Self-Paced Training Kit (Exam 70-516): Accessing Data with Microsoft® .NET Framework 4 


    Vitor Mendes | Seu feedback é muito importante para todos!
    Visite o meu site: http://www.vitormendes.com.br/
    terça-feira, 6 de dezembro de 2011 13:15
  • Show

    muito obrigado cara .

    terça-feira, 6 de dezembro de 2011 13:43