VB 2005 - Lendo um arquivo XML em um TreeView
Ninguém pode reclamar, eu já tratei do controle TreeView em diversos artigos:
Neste artigo vou mostrar como você pode ler um arquivo XML para um controle TreeView no VB 2005 Express.
Na verdade existem diversas formas de você realizar esta tarefa, mais uma das maneiras mais fáceis é carregar o conteúdo do arquivo XML em um objeto XmlDocument e então exibir os atributos e nós deste objeto.
Abra o VB 2005 Express Edition e crie um novo projeto do tipo Windows Application chamado xmlTreeView; a seguir inclua os seguintes componentes no formulário padrão form1.vb:
O leiaute do formulário deverá ser o da figura abaixo:
Definição das propriedade
Anchor de cada um dos controles no
formulário:
|
Declare o seguinte namespace:
Imports System.xml
Declare a seguinte variável no topo do formulário:
Dim conteudoArquivo As New XmlDocument
Crie a rotina carregaTreeView() no formulário e inclua o seguinte código:
Private Sub carregaTreeView() ' ----- verifica se o arquivo xml existe If (My.Computer.FileSystem.FileExists(txtArquivoXML.Text) = False) Then MsgBox("Informe um arquivo XML válido.") Return End If ' ----- carrega o documento XML em um objeto XMLDocument Try conteudoArquivo.Load(txtArquivoXML.Text) Catch ex As Exception MsgBox("O documento XML não pode ser carregado pois ocorreu o seguinte erro : " & vbCrLf & vbCrLf & ex.Message) conteudoArquivo = Nothing Return End Try ' ----- Remove o conteudo do controle TreeView. tvwXML.Nodes.Clear() ' ----- Chama o metodo recursivamente que irá percorrer todos os ramos do arquivo XML. For Each No As Xml.XmlNode In conteudoArquivo.ChildNodes incluiNonaArvore(No, Nothing) Next No End Sub |
Defina agora a rotina incluiNonaArvore() contendo o seguinte código:
Private Sub incluiNonaArvore(ByVal No As Xml.XmlNode,
ByVal doNo As TreeNode) ' ----- Inclui um Nó e todos os seus itens subordinados Dim noBase As TreeNode ' ----- Ignora texto dos Nos, quando ele são marcados If (No.NodeType = Xml.XmlNodeType.Text) Then Return ' ----- Trata a tag "<?xml " de forma especial If (No.NodeType = Xml.XmlNodeType.XmlDeclaration) And (doNo Is Nothing) Then noBase = tvwXML.Nodes.Add(No.OuterXml.ToString()) Return End If ' ----- Inclui um No nele mesmo If (doNo Is Nothing) Then noBase = tvwXML.Nodes.Add(No.Name) Else noBase = doNo.Nodes.Add(No.Name) End If ' ----- Inclui atributos If (No.Attributes IsNot Nothing) Then For Each atributo As Xml.XmlAttribute In No.Attributes noBase.Nodes.Add("Attribute: " & atributo.Name & " = """ & atributo.Value & """") Next atributo End If ' ----- Inclui um conteudo If (No.InnerText <> "") Then noBase.Nodes.Add("Conteúdo : " & No.InnerText) End If ' ----- Inclui Nós filhos If (No.ChildNodes IsNot Nothing) Then For Each subNode As Xml.XmlNode In No.ChildNodes incluiNonaArvore(subNode, noBase) Next subNode End If End Sub |
A seguir no evento Click do botão - Carrega TreeView - faça chamada da rotina carregaTreeView():
Private Sub btnCarregaArquivo_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
btnCarregaArquivo.Click carregaTreeView() End Sub |
Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui : xmlTreeView.zip
Sugestão para melhorar o projeto: inclua um controle OpenFileDialog para efetuar uma busca automática através da janela Abrir Arquivo. Veja como usar este componente no artigo : VB.NET - Criando um Slide Show
Até o próximo artigo VB.NET....
José Carlos Macoratti