VB .NET -  Acessando e lendo XML e exibindo em um ListView


Hoje veremos como acessar um arquivo XML e exibir os dados em um controle ListView usando VB .NET.

Já faz um bom tempo que eu publiquei um artigo mostrando como usar o ListView no VB .NET. Configura aqui:  VB.NET - Usando o controle ListView

Para tratar com XML eu também já publiquei muitos artigos que você pode conferir nas referências. Vou deixar um link aqui : VB .NET - Visualizador de Arquivos XML - Macoratti.net

Então neste artigo eu vou apenas acessar um arquivo XML e exibir o seu conteúdo no ListView.

Vou acessar um arquivo XML chamado Alunos.xml que vai estar na pasta bin\Debug do projeto e que tem a seguinte estrutura :

<?xml version="1.0" encoding="utf-8" ?> 
<Alunos>
  <Aluno Id="10">
    <Nome>Jose Carlos</Nome>
    <Sobrenome>Macoratti</Sobrenome>
    <Email>macoratti@yahoo.com</Email>
  </Aluno>
  <Aluno Id="20">
    <Nome>Beatriz</Nome>
    <Sobrenome>Siqueira</Sobrenome>
    <Email>bibi@hotmail.com</Email>
  </Aluno>
  <Aluno Id="30">
    <Nome>Mario</Nome>
    <Sobrenome>Silveira</Sobrenome>
    <Email>mariosilv@gmail.com</Email>
  </Aluno>
  <Aluno Id="40">
    <Nome>Debora</Nome>
    <Sobrenome>Menezes</Sobrenome>
    <Email>deboramen@uol.com.br</Email>
  </Aluno>
  <Aluno Id="50">
    <Nome>Janice</Nome>
    <Sobrenome>Santos</Sobrenome>
    <Email>janjan@yahoo.com.br</Email>
  </Aluno>
</Alunos>

Recursos Usados neste artigo :

Criando o projeto Windows Forms

Abra o Visual Studio 2017 Community e crie um projeto Windows Forms com o nome Vbn_XMListView :

No formulário Form1.vb inclua os seguintes controles a partir da ToolBox:

  1. 1 Button - btnCarregarXML
  2. 1 ListView - lvDados , View = Details

E disponha os controles conforme o leiaute abaixo:

Agora no evento Click do botão de comando inclua o código abaixo:

 Private Sub btnCarregarXML_Click(sender As Object, e As EventArgs) Handles btnCarregarXML.Click
        CarregarArquivoXML()
 End Sub

A seguir temos o código da rotina CarregarArquivoXML():


    Private Sub CarregarArquivoXML()
        Dim pastaAplicacao = System.IO.Path.GetDirectoryName(
            System.Reflection.Assembly.GetExecutingAssembly().Location)
        Dim caminhoArquivo = System.IO.Path.Combine(pastaAplicacao, "alunos.xml")
        ' carrega o arquivo XML
        Dim documentoXML As New XmlDocument
        documentoXML.Load(caminhoArquivo)
        Dim node_raiz As XmlElement = documentoXML.DocumentElement
        ' Usa o primeiro No para fazer o cabeçalho
        Dim primeiro_node As XmlNode = node_raiz.FirstChild
        Dim texto As String = GetAtributosNomes(primeiro_node)
        Dim valores() As String = texto.Split("|"c)
        For Each str As String In valores
            Dim coluna_header As New ColumnHeader
            coluna_header.Text = str
            coluna_header.Width = 100
            lvDados.Columns.Add(coluna_header)
        Next str
        ' Le os valores do arquivo XML
        For Each primeiro_node In node_raiz.ChildNodes
            texto = GetAtributosValores(primeiro_node)
            valores = texto.Split("|"c)
            If valores.Length > 0 Then
                Dim lvw_item As ListViewItem = lvDados.Items.Add(valores(0))
                For i As Integer = 1 To valores.Length - 1
                    lvw_item.SubItems.Add(valores(i))
                Next i
            End If
        Next primeiro_node
        ' tamanho das colunas a ajustar
        For Each hdr As ColumnHeader In lvDados.Columns
            hdr.Width = -2
        Next hdr
    End Sub

Neste código lemos o arquivo XML alunos.xml e usamos o método GetAtributosNomes para ler os nomes dos atributos e o método GetAtributosValores para obter os valores dos atributos.

O código do método GetAtributosNomes e dado a seguir :

Private Function GetAtributosNomes(ByVal xml_node As XmlNode) As String
        Dim resultado As String = ""
        ' Obtem os nomes dos atributos dos elementos
        For Each attr As XmlAttribute In xml_node.Attributes
            resultado &= "|" & xml_node.Name & " " & attr.Name
        Next attr
        ' Se o elemento possui um único texto filho adiciona o nome do elemento
        If (xml_node.ChildNodes.Count = 1) And (xml_node.FirstChild.NodeType = XmlNodeType.Text) Then
            resultado = resultado & "|" & xml_node.Name
        Else
            'Obtem os nomes da hierarquia e seus atributos
            For Each child As XmlNode In xml_node.ChildNodes
                If child.NodeType = XmlNodeType.Element Then
                    resultado = resultado & "|" &
                    GetAtributosNomes(child)
                End If
            Next child
        End If
        If Len(resultado) > 0 Then resultado = resultado.Substring(1)
        Return resultado
    End Function

Agora temos o código do método GetAtributosValores() :

Private Function GetAtributosValores(ByVal xml_node As XmlNode) As String
        Dim resultado As String = ""
        ' Obtem os valores dos atributos dos elementos
        For Each attr As XmlAttribute In xml_node.Attributes
            resultado &= "|" & attr.Value
        Next attr
        ' Se o elemento possui um único texto filho adiciona o nome do elemento
        If (xml_node.ChildNodes.Count = 1) And (xml_node.FirstChild.NodeType = XmlNodeType.Text) Then
            resultado = resultado & "|" &
            xml_node.FirstChild.InnerText
        Else
            'Obtem os nomes da hierarquia e seus atributos
            For Each child As XmlNode In xml_node.ChildNodes
                If child.NodeType = XmlNodeType.Element Then
                    resultado &= "|" &
                    GetAtributosValores(child)
                End If
            Next child
        End If
        If Len(resultado) > 0 Then resultado = resultado.Substring(1)
        Return resultado
    End Function

Executando o projeto iremos obter o seguinte resultado exibindo o conteúdo do arquivo XML no ListView:

Você pode incrementar o projeto incluindo opções para o usuário informar o nome e caminho do arquivo XML a ser lido.

Pegue o projeto completo aqui :  Vbn_XMListView.zip

"Mas nós não recebemos o espírito do mundo, mas o Espírito que provém de Deus, para que pudéssemos conhecer o que nos é dado gratuitamente por Deus. "
1 Coríntios 2:12

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti