c# – load xml into gridview

Question:

In my project, I need to select an XML file from some HD folder and then read its content and show it in a gridview.

At this point, I can open the window to select the file , but I can't read that file and iterate over it and show the XML data in a gridview…

How can I do it ?

My codes:

 Stream myStream = null;
        OpenFileDialog openFileDialogXML = new OpenFileDialog();

        openFileDialogXML.InitialDirectory = "c:\\";
        openFileDialogXML.Filter = "xml files (*.xml)|*.txt|All files (*.*)|*.*";
        openFileDialogXML.FilterIndex = 2;
        openFileDialogXML.RestoreDirectory = true;

        if (openFileDialogXML.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialogXML.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        string caminhoArquivo = openFileDialogXML.ToString();

                        XmlDocument documento = new XmlDocument();
                        documento.Load(caminhoArquivo);
                        string docLoaded = documento.ToString(); 
                        // Insert code to read the stream here.

                        //classe que representa um xml, e faz o parse da string para o arquivo
                        XDocument doc = XDocument.Parse(docLoaded);

                        //cria a representação de uma tabela
                        DataTable tabela = new DataTable();

                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));
                        tabela.Columns.Add("tabela", typeof(string));

                        ////cria as linhas da tabela
                        DataRow registro;

                        ////itera sobre a tag do xml para pegar todos os dados 
                        foreach (var elmCertidao in doc.Root.Elements("tag"))
                        {
                      
                            //recebe os registros do xml e representa em linhas
                            registro = tabela.NewRow();

                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                            registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));

                        //    //objeto com todas as colunas
                            tabela.Rows.Add(registro);
                        }

                        ////monta o grid com as informações presentes no objeto
                        dgDataGrid.DataSource = tabela;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
            }
        }

I know it's wrong, but I've never done that kind of thing, so if you can help me, that would be great!

EDIT

I'm able to scan the XML, but only up to a certain tag… How can I get everything? I can only scan to tag 13.

Codes:

 if (openFileDialogXML.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialogXML.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        //limpa o conteudo do textbox
                        txtCaminhoArquivoXML.Text = "";

                        // Le os arquivos selecionados 
                        foreach (String arquivo in openFileDialogXML.FileNames)
                        {
                            txtCaminhoArquivoXML.Text += arquivo;
                        }

                        try
                        {
                            // carrega e exibe o arquivo XML(le o conteudo do xml que esta no caminho do diretório)
                            StreamReader SR = File.OpenText(txtCaminhoArquivoXML.Text);
                            string _stringXml = SR.ReadToEnd();
                            SR.Close();

                            _stringXml = _stringXml.Replace("\n", "");
                            _stringXml = _stringXml.Replace("\r", "");

                            //faz o parse de uma string para uma representação de XML
                            XDocument doc = XDocument.Parse(_stringXml);

                            //cria a representação de uma tabela
                            DataTable tabela = new DataTable();

                            tabela.Columns.Add("tag1", typeof(string));
                            tabela.Columns.Add("tag2", typeof(string));
                            tabela.Columns.Add("tag3", typeof(string));
                            tabela.Columns.Add("tag4", typeof(string));
                            tabela.Columns.Add("tag5", typeof(string));
                            tabela.Columns.Add("tag6", typeof(string));
                            tabela.Columns.Add("tag7", typeof(string));
                            tabela.Columns.Add("tag8", typeof(string));
                            tabela.Columns.Add("tag9", typeof(string));
                            tabela.Columns.Add("tag10", typeof(string));
                            tabela.Columns.Add("tag11", typeof(string));
                            tabela.Columns.Add("tag12", typeof(string));
                            tabela.Columns.Add("tag13", typeof(string));
                            tabela.Columns.Add("tag14", typeof(string));
                            tabela.Columns.Add("tag15", typeof(string));
                            tabela.Columns.Add("tag16", typeof(string));
                            tabela.Columns.Add("tag17", typeof(string));
                            tabela.Columns.Add("tag18", typeof(string));
                            tabela.Columns.Add("tag19", typeof(string));
                            tabela.Columns.Add("tag20", typeof(string));

                            //cria as linhas da tabela
                            DataRow registro;

                            //itera sobre a tag do xml para pegar todos os dados 
                            foreach (var elmCertidao in doc.Root.Elements("emissao"))
                            {
                                //recebe os registros do xml e representa em linhas
                                registro = tabela.NewRow();

                                registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmCertidao.Element("tag"));
                                registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                                registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                                registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                                registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));

                                //objeto com todas as colunas
                                tabela.Rows.Add(registro);
                            }

                            //monta o grid com as informações presentes no objeto
                            dgDataGrid.DataSource = tabela;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Erro ao carregar arquivo : " + ex.Message);
                        }


                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Não foi possível ler o arquivo a partir do disco. Erro original: " + ex.Message);
            }
        }

Answer:

I managed to solve it very simply. Note that in the code, I have foreach's that iterate over all the XML tags to get their existing value.

Codes:

private void tsbImportarXML_Click(object sender, EventArgs e)
    {
        //Configura a janela que abre para o usuário escolher o arquivo
        Stream myStream = null;
        OpenFileDialog openFileDialogXML = new OpenFileDialog();

        //Já abre a janela dentro do C:
        openFileDialogXML.InitialDirectory = "c:\\";

        //Tipos de arquivo
        openFileDialogXML.Filter = "Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*";

        //Obtém ou define o índice do filtro selecionado atualmente na caixa de diálogo de arquivo. 
        openFileDialogXML.FilterIndex = 2;

        //Obtém ou define um valor indicando se a caixa de diálogo restaura o diretório atual antes de fechar. 
        openFileDialogXML.RestoreDirectory = true;

        #region Carregamento do XML no Grid

        if (openFileDialogXML.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if ((myStream = openFileDialogXML.OpenFile()) != null)
                {
                    using (myStream)
                    {
                        //limpa o conteudo do textbox
                        txtCaminhoArquivoXML.Text = "";

                        // Le os arquivos selecionados 
                        foreach (String arquivo in openFileDialogXML.FileNames)
                        {
                            txtCaminhoArquivoXML.Text += arquivo;
                        }

                        try
                        {
                            // carrega e exibe o arquivo XML(le o conteudo do xml que esta no caminho do diretório)
                            StreamReader SR = File.OpenText(txtCaminhoArquivoXML.Text);
                            string _stringXml = SR.ReadToEnd();
                            SR.Close();

                            _stringXml = _stringXml.Replace("\n", "");
                            _stringXml = _stringXml.Replace("\r", "");

                            //faz o parse de uma string para uma representação de XML
                            XDocument doc = XDocument.Parse(_stringXml);                            

                            //cria a representação de uma tabela
                            DataTable tabela = new DataTable();

                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));
                            tabela.Columns.Add("tag", typeof(string));

                            //cria as linhas da tabela
                            DataRow registro;

                            //itera sobre a tag do xml para pegar todos os dados 
                            foreach (var elmXML in doc.Root.Elements("tag"))
                            {
                                //recebe os registros do xml e representa em linhas
                                registro = tabela.NewRow();

                                registro["tag"] = GetValueOrDefault(doc.Root.Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));

                                //itera sobre o subelemento gemeos dentro da tag root ali de cima
                                foreach (var elmXMLTag in elmXML.Elements("tag"))
                                {
                                    registro["tag"] = GetValueOrDefault(elmXMLTag.Element("tag"));

                                    //itera sobre o subelemento irmao dentro da tag ali de cima
                                    foreach (var elmXML2Tag in elmXMLTag.Elements("tag"))
                                    {
                                        registro["tag"] = GetValueOrDefault(elmXML2Tag.Element("tag"));
                                    }                                       
                                }

                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));
                                registro["tag"] = GetValueOrDefault(elmXML .Element("tag"));

                                foreach (var elmRej in doc.Root.Elements("tag"))
                                {
                                    registro["tag"] = GetValueOrDefault(elmRej.Element("tag"));
                                }


                                //objeto com todas as colunas
                                tabela.Rows.Add(registro);
                            }

                            //monta o grid com as informações presentes no objeto
                            dgDataGrid.DataSource = tabela;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Erro ao carregar arquivo : " + ex.Message);
                        }


                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: Não foi possível ler o arquivo a partir do disco. Erro original: " + ex.Message);
            }
        }

        #endregion
    }

    #region Métodos

    //verifica o primeiro valor e se for diferente de null retorna todas as informações do xml
    public static string GetValueOrDefault(XElement xElement)
    {
        if (xElement != null)
            return xElement.Value;

        return String.Empty;
    }

    #endregion

tag read xml element, node, xml tag. txtCaminhoArquivoXML read a text field in the form

Scroll to Top