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:
lblXML          btnCarregaArquivo tvwXML    txtArquivoXML   
Top, Left, Right Bottom, Right Top, Bottom, Left, Right Top, Bottom, Left

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