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:
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
ListView - Exibindo dados com busca dinâmica - Macoratti.net