Creando un visor de XML (Parte II)

Este artículo es la continuación de:

Creando un visor de XML (Parte I)

POBLANDO EL TREEVIEW:

El proceso es muy similar al descrito anteriormente, salvo que ahora en vez de transformar el árbol en una cadena de texto formateada, se irán incluyendo sus nodos jerárquicamente en un TreeView.

Para poblar el TreeView también nos basaremos en dos funciones, una para inicializar las variables y cargar el documento xml, y otra que será llamada de forma recursiva.

VB.NET:
  1. Private Sub MostrarArbol(ByVal consultar As Boolean)
  2.         Dim arbol As New Xml.XmlDocument
  3.         Dim nodoRaiz As TreeNode
  4.         Dim atr As Xml.XmlAttribute
  5.  
  6.         'Utilizados solo para hacer la consulta
  7.         Dim nodosSeleccionados As Xml.XmlNodeList
  8.  
  9.         Try
  10.             arbol.LoadXml(rtxtXML.Text)
  11.  
  12.             trvXML.Nodes.Clear()
  13.             nodoRaiz = New TreeNode(arbol.DocumentElement.Name)
  14.             For Each atr In arbol.DocumentElement.Attributes
  15.                 nodoRaiz.Text &= "   " & atr.Name & "=" & atr.Value
  16.             Next
  17.             trvXML.Nodes.Add(nodoRaiz)
  18.  
  19.             If consultar Then
  20.                 nodosSeleccionados = arbol.SelectNodes(txtConsulta.Text)
  21.                 If estaSeleccionado(arbol.DocumentElement, nodosSeleccionados) Then
  22.                     nodoRaiz.ForeColor = Color.Blue
  23.                     nodoRaiz.NodeFont = fuenteNegritaArbol
  24.                 End If
  25.                 AnadirNodosAArbol(nodoRaiz, arbol.DocumentElement, nodosSeleccionados)
  26.             Else
  27.                 AnadirNodosAArbol(nodoRaiz, arbol.DocumentElement)
  28.             End If
  29.  
  30.             trvXML.ExpandAll()
  31.  
  32.         Catch ex As Exception
  33.             MsgBox("Se ha producido el siguiente error:" & vbCrLf & vbCrLf & " - " & ex.Message)
  34.         End Try
  35.  
  36.     End Sub
  37.  
  38.     Private Sub AnadirNodosAArbol(ByVal arbol As TreeNode, ByVal nodo As Xml.XmlNode, Optional ByVal nodosSeleccionados As Xml.XmlNodeList = Nothing)
  39.         Dim hijo As Xml.XmlNode
  40.         Dim atr As Xml.XmlAttribute
  41.         Dim nodoArbol As TreeNode
  42.  
  43.         For Each hijo In nodo.ChildNodes
  44.             If hijo.NodeType <> Xml.XmlNodeType.Text And hijo.NodeType <> Xml.XmlNodeType.Comment Then
  45.                 nodoArbol = New TreeNode(hijo.Name)
  46.                 If Not nodosSeleccionados Is Nothing Then
  47.                     If estaSeleccionado(hijo, nodosSeleccionados) Then
  48.                         nodoArbol.ForeColor = Color.Blue
  49.                         nodoArbol.NodeFont = fuenteNegritaArbol
  50.                     End If
  51.                 End If
  52.                 arbol.Nodes.Add(nodoArbol)
  53.                 If textoDelNodo(hijo) <> "" Then
  54.                     nodoArbol.Text &= "=" & textoDelNodo(hijo)
  55.                 End If
  56.                 For Each atr In hijo.Attributes
  57.                     nodoArbol.Text &= "   " & atr.Name & "=" & atr.Value
  58.                 Next
  59.  
  60.                 anadirNodosAArbol(nodoArbol, hijo, nodosSeleccionados)
  61.             End If
  62.         Next
  63.     End Sub

COMPLETANDO LA HERRAMIENTA:

Con esto se habrá terminado el núcleo de nuestra aplicación, habiéndola dotado de la funcionalidad básica para la que se ideó, es decir, el mostrar el xml formateado para que resulte más legible, mostrarlo mediante un árbol y permitir seleccionar nodos mediante XPath visualizando aquellos que respondan a la expresión de búsqueda resaltados.

Vayamos ahora a dotarla de ciertos elementos adicionales para completar la aplicación.

En primer lugar le añadiremos la funcionalidad de permitir ajustar las líneas para que todo el texto de una línea se muestre en pantalla, ocupando las líneas que sean necesarias para mostrarse. Esto es tan sencillo como añadir un checkBox, y establecer la propiedad WordWrap de los RichTextBox al valor de la propiedad Checked del checkBox

Le añadiremos también la funcionalidad de cargar y guardar ficheros. Con este fin se crearán dos elementos de menú y se les asociarán teclas de acceso rápido, CTRL+C y CTRL+G respectivamente. El documento que guardaremos será el xml ya formateado, no el original.

Según vayamos cargando ficheros, éstos se irán incluyendo en la lista de recientes hasta un máximo de cinco. De igual forma incluimos en la lista de ficheros recientes aquéllos documentos que guardemos. El código que realiza esta inserción es el siguiente:

VB.NET:
  1. Private Sub InsertarEnRecientes(ByVal nombreFichero As String)
  2.         Dim menu As MenuItem
  3.         Dim i As Integer
  4.         Dim encontrado As Boolean
  5.  
  6.         Try
  7.             i = 0
  8.             While i <= mnuRecientes.MenuItems.Count - 1 And Not encontrado
  9.                 'Si ya estaba lo quitamos
  10.                 If mnuRecientes.MenuItems(i).Text = nombreFichero Then
  11.                     mnuRecientes.MenuItems.RemoveAt(i)
  12.                     encontrado = True
  13.                 End If
  14.                 i = i + 1
  15.             End While
  16.             menu = New MenuItem(nombreFichero, AddressOf FichReciente_Click)
  17.             mnuRecientes.MenuItems.Add(0, menu)
  18.             If mnuRecientes.MenuItems.Count = 6 Then
  19.                 mnuRecientes.MenuItems.RemoveAt(5)
  20.             End If
  21.         Catch ex As Exception
  22.             MsgBox("Se ha producido el siguiente error:" & vbCrLf & vbCrLf & " - " & ex.Message)
  23.         End Try
  24.  
  25.     End Sub

Cuando se cierre el formulario, se guardará la lista de ficheros recientes en un fichero XML, para que dicha listas persista entre ejecuciones de la aplicación.

VB.NET:
  1. Private Sub GuardarRecientes()
  2.         Dim arbol As New Xml.XmlDocument
  3.         Dim nodo As Xml.XmlNode
  4.         Dim menu As MenuItem
  5.  
  6.         Try
  7.             nodo = arbol.CreateElement("Recientes")
  8.             arbol.AppendChild(nodo)
  9.  
  10.             For Each menu In mnuRecientes.MenuItems
  11.                 nodo = arbol.CreateElement("Fichero")
  12.                 nodo.InnerText = menu.Text
  13.                 arbol.DocumentElement.AppendChild(nodo)
  14.             Next
  15.  
  16.             arbol.Save(Application.StartupPath & "\Recientes.xml")
  17.  
  18.         Catch ex As Exception
  19.             MsgBox("Se ha producido el siguiente error:" & vbCrLf & vbCrLf & " - " & ex.Message)
  20.         End Try
  21.     End Sub

 

Primera parte de este artículo:

Creando un visor de XML (Parte I)

Leave a Reply

Antispam. Escriba la palabra 'hola' (sin comillas)