none
Estruturar Informações RRS feed

  • Pergunta

  • Tenho o código baixo onde faço a leitura de um xml e percorro ele ele ta me trazendo toda a informação 

    Código 

    public void CarregarXML()
            {
                
                
                XDocument doc = XDocument.Load((CaminhoDadosXML(caminho) + @"Dados\120716.xml"));
    
                Leitura leitura = FromXmlString(doc.ToString());
                var silos = leitura.silos.Silo.ToList(); //selecionando todos os silos
                foreach (var p in silos)//Percorre os silos
                {
                    var pendulos = p.pendulos.Pendulo.ToList(); //selecionando todos os pendulos de cada silo
                    foreach (var item in pendulos)//Percorre os pendulos de cada silo
                    {
                        var pendulosS = item.S;// Obtendo todos os "S"
                        foreach (var s in pendulosS)//Percorrendo os "S"
                        {
                            
    
                            Console.WriteLine(string.Format("Silo: {0}\tData: {1}\tHora: {2}\tID_P: {3}, S: {4}", p.ID, p.data, p.hora, item.ID_P, s));
                        }
                    }
                
                }
    }

    XML:

    <?xml version="1.0" encoding="utf-16"?>
    <Leitura xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <silos>
        <Silo>
          <ID>1</ID>
          <data>120716</data>
          <hora>0931</hora>
          <umidade>061</umidade>
          <temperatura>21</temperatura>
          <pendulos>
            <Pendulo>
              <ID_P>001</ID_P>
              <S>27</S>
              <S>27</S>
              <S>27</S>
              <S>27</S>
              <S>27</S>
              <S>27</S>
              <S>27</S>
              <S>25</S>
              <S>27</S>
              <S>27</S>
              <S>27</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>27</S>
              <S>27</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>002</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>24</S>
              <S>24</S>
              <S>24</S>
              <S>25</S>
              <S>24</S>
              <S>24</S>
              <S>24</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>003</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>004</ID_P>
              <S>23</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>005</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S />
            </Pendulo>
          </pendulos>
        </Silo>
        <Silo>
          <ID>2</ID>
          <data>010716</data>
          <hora>1100</hora>
          <umidade>052</umidade>
          <temperatura>23</temperatura>
          <pendulos>
            <Pendulo>
              <ID_P>001</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>002</ID_P>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>25</S>
              <S>25</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>003</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>004</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S>25</S>
              <S>23</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>005</ID_P>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>23</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S />
            </Pendulo>
            <Pendulo>
              <ID_P>006</ID_P>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S>25</S>
              <S />
            </Pendulo>
          </pendulos>
        </Silo>
        <Silo>
      </silos>
    </Leitura>

    eu gostaria de divir a informaçao por exemplo colocar um textbox onde se eu colocar 1 ele busca apenas as informações do silo de ID 1 e mostrar todas as informaçoes em labels hj ele so imprimi tudo no console.

    Obrigado

    sexta-feira, 22 de julho de 2016 17:34

Respostas

  • Bom dia,

    Para buscar um silo pelo ID, você pode fazer assim:

    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    Para carregar os "labels" basta você seguir a mesma lógica que fez para listar os dados. Exemplo:
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;
        foreach (var s in p.S)//Percorres os "S"
        {
            //Dados dos "S"
            var sValue = s;
        }
    }

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney segunda-feira, 25 de julho de 2016 12:44
    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 13:04
    segunda-feira, 25 de julho de 2016 12:44
  • Bom dia,

    Bom saber que consegui ajudar.
    Quanto aos sensores "S" por serem dinâmicos você pode criar dinamicamente os labels fazendo assim:

    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    Label label;
    int posicao = 10;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;                
        label = new Label();
        label.Text = string.Join(",", p.S);
        label.Location = new Point(0, posicao);
        this.Controls.Add(label);
        posicao += 25;
    }

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 13:46
    segunda-feira, 25 de julho de 2016 13:30
  • Altere a propriedade AutoSize do label para true:
    Observe a linha: label.AutoSize = true;
    var silos = leitura.silos.Silo.ToList(); //selecionando todos os silos
    
    
    textBox1.Text = "1";
    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    Label label;
    int posicao = 10;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;
        label = new Label();
        label.Text = string.Join(",", p.S);
        label.Location = new Point(300, posicao);
        label.AutoSize = true;
        this.Controls.Add(label);
        posicao += 25;
    }
    Att,

    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 14:01
    segunda-feira, 25 de julho de 2016 13:56
  • Bom dia,

    Só lembrando que para mostrar da maneira que você está dizendo, você precisa especifica o pendulo. Já que cada silo possui "N" pendulos que por sua vez possui "N" sensores. Talvez seria interessante você trabalhar com o componente "TreeView". Mas como solicitado, segue o exemplo:

    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    int posicaoX = 200;
    Label label;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;
        int posicaoY = 10;
        label = new Label();
        label.Text = string.Format("Pendulo ID {0}", p.ID_P);
        label.Location = new Point(posicaoX, posicaoY);
        this.Controls.Add(label);
        posicaoY += 40;
        int numeroSensor = 1;
        foreach (var s in p.S)
        {
            if (!string.IsNullOrEmpty(s))
            {
                label = new Label();
                label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s);
                label.Location = new Point(posicaoX, posicaoY);
                label.AutoSize = true;
                this.Controls.Add(label);
                posicaoY += 20;
                numeroSensor++;
            }
        }
        posicaoX += 120;
    }

    Se tiver interesse pelo treeView:
    http://www.linhadecodigo.com.br/artigo/3081/componente-treeview-csharp.aspx

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney segunda-feira, 25 de julho de 2016 15:13
    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 19:51
    segunda-feira, 25 de julho de 2016 15:13
  • Segue um exemplo ou sugestão de TreeView:
    

    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.


    • Editado Silvaney segunda-feira, 25 de julho de 2016 17:29 Correção
    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 20:11
    segunda-feira, 25 de julho de 2016 15:34
  • Bom dia,

    Você diz a cor do Label ?
    Dentro do laço que percorre os Sensores, pode fazer assim:

    foreach (var s in p.S)
    {
        if (!string.IsNullOrEmpty(s))
        {
            label = new Label();
            label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s);
            label.Location = new Point(posicaoX, posicaoY);
            label.AutoSize = true;
            if(Convert.ToInt32(s) > 27)
                label.ForeColor = System.Drawing.Color.Red;
            this.Controls.Add(label);
            posicaoY += 20;
            numeroSensor++;
        }
    }

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    terça-feira, 26 de julho de 2016 11:53

Todas as Respostas

  • alguem ?
    segunda-feira, 25 de julho de 2016 12:25
  • Bom dia,

    Para buscar um silo pelo ID, você pode fazer assim:

    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    Para carregar os "labels" basta você seguir a mesma lógica que fez para listar os dados. Exemplo:
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;
        foreach (var s in p.S)//Percorres os "S"
        {
            //Dados dos "S"
            var sValue = s;
        }
    }

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney segunda-feira, 25 de julho de 2016 12:44
    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 13:04
    segunda-feira, 25 de julho de 2016 12:44
  • Obrigado Silvaney mais uma vez ,  consegui fazer para os dados do silo e o id do pendulo mais para os sensores que pode varia as informações não consegui pois a variável sValue pode receber vários S.


    segunda-feira, 25 de julho de 2016 13:06
  • Bom dia,

    Bom saber que consegui ajudar.
    Quanto aos sensores "S" por serem dinâmicos você pode criar dinamicamente os labels fazendo assim:

    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    Label label;
    int posicao = 10;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;                
        label = new Label();
        label.Text = string.Join(",", p.S);
        label.Location = new Point(0, posicao);
        this.Controls.Add(label);
        posicao += 25;
    }

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 13:46
    segunda-feira, 25 de julho de 2016 13:30
  • Silvaney deu certo só que ele esta exibindo somente 6 registro de cada pendulo e contem 16 s , segue imagem


    • Editado CLPSimens segunda-feira, 25 de julho de 2016 13:50
    segunda-feira, 25 de julho de 2016 13:48
  • Altere a propriedade AutoSize do label para true:
    Observe a linha: label.AutoSize = true;
    var silos = leitura.silos.Silo.ToList(); //selecionando todos os silos
    
    
    textBox1.Text = "1";
    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    Label label;
    int posicao = 10;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;
        label = new Label();
        label.Text = string.Join(",", p.S);
        label.Location = new Point(300, posicao);
        label.AutoSize = true;
        this.Controls.Add(label);
        posicao += 25;
    }
    Att,

    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 14:01
    segunda-feira, 25 de julho de 2016 13:56
  • Deu certo Silvaney , tem como eu controlar a posiçao de cada label por exemplo exibir ou talvez usar textbox qual a melhor forma vc me sugere 

    Sensor 3 : 25

    Sensor 2 : 27

    Sensor 1 : 28 

    segunda-feira, 25 de julho de 2016 14:03
  • Não entendi....
    Se for a posição de cada label na tela, é possível sim.
    A posição pode ser alterada facilmente "new Point(300, 10);" ou seja posição x e y.

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    segunda-feira, 25 de julho de 2016 14:17
  • eu digo assim os dados ta vindo assim 25,26,25,26,24,26,27..

    só que preciso mostrar assim : 

    Sensor 1 : 25

    Sensor 2 : 26

    Sensor 3 : 25 

    esses valores que vem em S sao valores de temperatura de sensores cada valor é de um sensor diferente

    segunda-feira, 25 de julho de 2016 14:26
  • Bom dia,

    Só lembrando que para mostrar da maneira que você está dizendo, você precisa especifica o pendulo. Já que cada silo possui "N" pendulos que por sua vez possui "N" sensores. Talvez seria interessante você trabalhar com o componente "TreeView". Mas como solicitado, segue o exemplo:

    var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
    
    //Dados do Silo
    var id = silo.ID;
    var temperarura = silo.temperatura;
    //etc
    //Dados dos Pendulos
    var pendulos = silo.pendulos.Pendulo;
    int posicaoX = 200;
    Label label;
    foreach (var p in pendulos)
    {
        //Id do Pendulo
        var id_p = p.ID_P;
        int posicaoY = 10;
        label = new Label();
        label.Text = string.Format("Pendulo ID {0}", p.ID_P);
        label.Location = new Point(posicaoX, posicaoY);
        this.Controls.Add(label);
        posicaoY += 40;
        int numeroSensor = 1;
        foreach (var s in p.S)
        {
            if (!string.IsNullOrEmpty(s))
            {
                label = new Label();
                label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s);
                label.Location = new Point(posicaoX, posicaoY);
                label.AutoSize = true;
                this.Controls.Add(label);
                posicaoY += 20;
                numeroSensor++;
            }
        }
        posicaoX += 120;
    }

    Se tiver interesse pelo treeView:
    http://www.linhadecodigo.com.br/artigo/3081/componente-treeview-csharp.aspx

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    • Sugerido como Resposta Silvaney segunda-feira, 25 de julho de 2016 15:13
    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 19:51
    segunda-feira, 25 de julho de 2016 15:13
  • Segue um exemplo ou sugestão de TreeView:
    

    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.


    • Editado Silvaney segunda-feira, 25 de julho de 2016 17:29 Correção
    • Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 20:11
    segunda-feira, 25 de julho de 2016 15:34
  • é que preciso usar if de comparaçaoes em cada sensor para mudar cor de um elemento por isso creio que o treeview nao me ajude preciso  por exemplo se o sensor 1 passa de 30 fica vermelho o botao 
    segunda-feira, 25 de julho de 2016 19:52
  • Boa tarde,

    O Exemplo acima (Sensor embaixo do outro) resolveu o problema?

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    segunda-feira, 25 de julho de 2016 20:06
  • resolveu sim  Silvaney obrigado pela paciência ,  só preciso saber como faço para usar essas informações igual te falei por exemplo o sensor 8 ta com 35 entao eu vo colocar uma img de cor vermelha tem como eu trabalhar condições desses valor um por um ? 
    segunda-feira, 25 de julho de 2016 20:11
  • Bom dia,

    Você diz a cor do Label ?
    Dentro do laço que percorre os Sensores, pode fazer assim:

    foreach (var s in p.S)
    {
        if (!string.IsNullOrEmpty(s))
        {
            label = new Label();
            label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s);
            label.Location = new Point(posicaoX, posicaoY);
            label.AutoSize = true;
            if(Convert.ToInt32(s) > 27)
                label.ForeColor = System.Drawing.Color.Red;
            this.Controls.Add(label);
            posicaoY += 20;
            numeroSensor++;
        }
    }

    Att,


    Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.

    terça-feira, 26 de julho de 2016 11:53