martes, 24 de noviembre de 2015

Receta C# No. 6-1: Visualización de la Estructura de un Documento XML en un Component TreeView

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Clase XmlDocument
5.1.1 Generalidades
5.1.2 Rendimiento
5.1.3 Uso
5.2 Clase XmlNode
5.2.1 Generalidades
5.2.2 Propiedades sobresalientes
6. Práctica: Código C#
7. Repositorio y Solución Visual Studio
8. Conclusiones
9. Literatura & Enlaces

1. Introducción

A pesar de que existe una sección especializada en conocimiento teórico y práctico de la tecnología XML con C#, vale la pena introducir una serie de recetas dedicadas al procesamiento de XML. Esta serie estará dedicada a este tema y aspectos específicos como: parsing, manipulación, validación, búsqueda, serialización, transformación y acceso a datos con XML. Por otra parte, se ha hablado acerca de XML como una tecnología integral del núcleo de Microsoft .NET Framework, que es parte de tareas como: serialización de objetos Microsoft ADO.NET DataSet, invocación de servicios Web, lectura de un archivo de configuración de aplicación -Web.config o App.Config-. Es momento de dar inicio con la primera receta XML. Aquí se aprenderá a mostrar o visualizar el contenido estructural de un documento XML en un componente visual TreeView.

2. Palabras Clave

  • C#
  • Component visual
  • Parsing
  • Reentrancia
  • Serialización
  • Servicio Web
  • WinForms
  • XML

3. Problema

Se requiere mostrar el contenido y la estructura de un documento en formato XML en una aplicación basada en WinForms.

4. Solución

Para solucionar este problema se requiere llevar a cabo las siguientes tareas:
  • Uso de la clase System.Xml.XmlDocument para la carga del documento XML.
  • Creación de un método basado en reentrancia para la conversión de un objeto XmlNode a un objeto visual System.Windows.Forms.TreeNode. Este método se invocará de forma recursiva para el recorrido de los nodos anidados.

5. Discusión de la Solución

5.1 Clase XmlDocument

5.1.1 Generalidades

La clase System.Xml.XmlDocument ("XmlDocument Class", 2015) permite la carga, validación, edición, agregación y ubicación de un elemento en un documento XML. Esta clase carga el contenido en la memoria de trabajo del sistema para su respectiva representación y manipulación. Además, esta clase está desarrollando según los requerimientos de W3C Document Object Model (DOM); lo que en consecuencia permite desarrollar aplicaciones basadas en los estándares y reglas de este organización mundial de tecnologías abiertas.

Por otra parte, con XmlDocument el programador puede explorar los nodos de la estructura del documento en cualquier dirección. Así mismo, tiene permitido realizar cambios de contenido y estructura, remover e insertar nodos en tiempo de ejecución.

5.1.2 Rendimiento

Anterioramente se había mencionado que la representación de un documento XML se realiza en la memoria RAM; este diseño natural de esta clase no permite escalar para documentos de tamaño grande, a razón que su contenido se carga completamente en la memoria. Para solventar esta carencia, Microsoft .NET Framework cuenta con alternativas escalables como XmlReader y XmlWriter (se escribirán recetas sobre estas clases más adelante).

5.1.3 Uso

Para usar esta clase basta con ejecutar estas tareas:
  1. Creación de un objeto XmlDocument.
  2. Invocar al método Load ("XmlDocument.Load Method", 2015).
  3. Pasar como argumento la ubicación del archivo, u objetos Stream, TextReader, o XmlReader o en un caso más simple y directo, una cadena de caracteres -String-.
  4. Explorar el contenido del documento con construcciones como XmlDocument.DocumentElement, XmlNode.

5.2 Clase XmlNode

5.2.1 Generalidades

La clase System.Xml.XmlNode ("XmlNode Class", 2015) representa un elemento o nodo de un documento XML. Un objeto XmlNode puede contener en sí mismo otros objetos XmlNode y así sucesivamente hasta completar la estructura anidada del documento.

5.2.2 Propiedades sobresalientes

A continuación algunas de las propiedades sobresalientes de un objeto XmlNode:
  • ChildNodes: colección de nodos anidados.
  • Name: nombre del nodo actual.
  • NodeType: indica el tipo del nodo -atributo, elemento, texto-.
  • Value: contenido del nodo.
  • Attributes: colección de objetos que representan los atributos de un nodo.
  • InnerText: cadena de caracteres que representa el contenido textual anidado del nodo.

6. Práctica: Código C#

En el siguiente ejemplo (adaptado de Jones, A., 2010) se construye una interfaz gráfica de usuario para cargar un archivo XML y construir el árbol que constituye su estructura y contenido sobre un componente TreeView.

Archivo C# R0601.cs [Enlace alternativo][Enlace alternativo]:

Con las líneas 14-17 se indica la carga inicial del archivo XML CatalogoProductos.xml una vez se inicie la aplicación. Con el manejador de evento de clic en el botón btnXml, líneas 19-42, se ejecutan las siguientes operaciones:
  • Línea 22: se remueven los nodos del archivo actual cargado.
  • Línea 25: se crea un objeto XmlDocument.
  • Línea 29: se carga el archivo indicado en el campo de texto txtRutaXml.
  • Línea 38: con la llamada al método ConvertirXmlNodeATreeNode se inicia la conversión de elementos XmlNode a objetos TreeNode.
  • Línea 41: expande todos los nodos del primer nivel del objeto TreeView.
La conversión de elementos XmlNode a TreeNode se lleva a cabo con la implementación del método ConvertirXmlNodeATreeNode:
  • Línea 47: agrega objeto TreeNode a la colección de nodos.
  • Líneas 50-69: evalúa que tipo de nodo y personaliza el texto a mostrar en el objeto TreeView.
  • Líneas 72-78: realiza de modo recursivo la agregación de atributos para el nodo actual.
  • Líneas 81-84: realiza de modo recursivo la agregación de nodos hijos.
Archivo XML CatalogoProductos.xml [Enlace alternativo][Enlace alternativo]:
Este archivo representa la estructura y contenido de un catálogo de productos de una cafetería. El archivo es leído una vez la aplicación se inicia.

El paso a seguir es ejecutar la aplicación en Visual Studio. Este es el resultado:
Aplicación de lectura estructura y contenido de documento XML
Figura 1. Aplicación de lectura estructura y contenido de documento XML.

Animación 1. Aplicación de lectura estructura y contenido de documento XML.

7. Repositorio y Descarga Solución Visual Studio

7.2 Repositorio

URL de repositorio de esta receta: https://github.com/Fhernd/R0601

7.2 Descarga proyecto

8. Conclusiones

Se explorado la clase XmlDocument del nombre de espacio System.Xml, la cual resulta útil para la carga, edición, inserción y manipulación de la estructura y contenido de un documento XML. Se construyó una interfaz gráfica de usuario para representar visualmente la estructura jerárquica de un documento XML, junto con su contenido. En particular, se usó una implementación recursiva para recorrer la estructura arbórea del documento. En la próxima receta C# se demostrará cómo insertar nodos en un documento XML.

9. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
XmlDocument Class (System.Xml) (2015, noviembre 24). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx.
XmlDocument.Load Method (System.Xml) (2015, noviembre 24). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.load(v=vs.110).aspx.
XmlNode Class (System.Xml) (2015, noviembre 24). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmlnode(v=vs.110).aspx.
Reentrancy (computing) (2015, noviembre 24). Recuperado desde:  https://en.wikipedia.org/wiki/Reentrancy_(computing).


V

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.