Usuário com melhor resposta
Separar tags XML em C#

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
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/- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:33
-
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/- Editado Vitor Mendes terça-feira, 6 de dezembro de 2011 12:54
- Sugerido como Resposta Danilo.csvicentini terça-feira, 6 de dezembro de 2011 13:43
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:33
-
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/- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:33
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- Mesclado AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:34 duplicado
-
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/- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:33
-
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/ -
-
-
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/- Editado Vitor Mendes terça-feira, 6 de dezembro de 2011 12:54
- Sugerido como Resposta Danilo.csvicentini terça-feira, 6 de dezembro de 2011 13:43
- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:33
-
-
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/- Marcado como Resposta AndreAlvesLimaModerator sexta-feira, 16 de dezembro de 2011 11:33
-