XDocument

Escribir ficheros XML mediante LINQ


Ayer veíamos la estructura de un fichero XML y cómo hacer uso del espacio de nombres System.Xml.Linq para generar un nuevo fichero XML. Anteayer, además aprendíamos de la versatilidad de LINQ, que nos permite iterar y filtrar sobre prácticamente cualquier cosa.

Hoy vamos a aunar los valores de ambos conceptos y vamos a generar (y consultar) un fichero XML a través de LINQ. Por ello es altamente aconsejable conocer previamente los conceptos explicados en los dos artículos anteriores.

Comenzaremos por el proceso de creación de un fichero XML. O más bien, de “cumplimentación”. Hace ya unos añitos (¡cómo pasa el tiempo!) explicábamos en este mismo blog la forma de utilizar la reflexión para acceder a los elementos de un objeto (métodos, propiedades, atributos…). Hace unos días he actualizado ese artículo con información sobre cómo hacer uso de LINQ para realizar la misma operación que realizamos entonces (¡ah…! los tiempos del Framework 2.0…). Sin embargo, en este artículo iremos un poco más allá y aplicaremos esa misma funcionalidad para, a partir de un objeto, conseguir generar un fichero XML que desglose los elementos de cada miembro de un objeto.

Antes de meternos en harina con los ficheros XML, conviene centrarnos en la parte de LINQ. El objetivo es el siguiente: crear un fichero XML que almacene la información de todos los miembros de la clase de un objeto. La estructura objetivo será la siguiente:

  • <Clase>
    • <ConstructorMembers>
      • <Constructor name = “nombreConstructor” value=”void nombreConstructor()” />
    • <MethodMembers>
      • <Method name = “ToString” value = “System.String ToString()” />
      • <Method name = …

Es decir, desglosaremos la clase en secciones que, a su vez, contendrán elementos pertenecientes a esa sección (ConstructorMembers contendrá elementos Constructor y así sucesivamente), que a su vez contendrán dos atributos: name y value.

(más…)

Generar un fichero XML con XDocument


La tecnología LINQ tiene como principal atractivo su versatilidad: es capaz de realizar proyecciones y filtrado sobre cualquier colección iterable, así como de generar colecciones de objetos “al vuelo” de forma sencilla, tal y como vimos en el artículo anterior.

Hoy aprenderemos a hacer uso de uno de los grandes avances que Microsoft ha proporcionado, desde mi punto de vista, al mundo de la programación .NET: el espacio de nombres System.Xml.Linq. Para ello crearemos una pequeña función que, haciendo uso de LINQ y Reflection, recorra todos los elementos de un objeto y genere un fichero XML con sus metadatos.

Supongo que todos sabremos qué es un fichero XML y cuál es su estructura, pero no viene de más realizar una pequeña introducción a este tipo de documentos antes de aprender a bucear en su información y a generar ficheros de este modo.

El fichero XML

Un fichero XML (eXtensible Markup Language) es un fichero de marcas (como HTML) completamente personalizable que permite almacenar datos de forma esquemática y ordenada. Los elementos que nos interesan para entender este ejemplo son los siguientes:

  • Documento: engloba el fichero XML en sí. Se compone de una cabecera o prólogo y de un elemento o nodo raíz, del que colgarán (estarán anidados dentro de él) el resto de elementos del documento. En la imagen que puede verse más abajo, el elemento raíz sería “configuración”.
  • Elemento o nodo: elemento principal de un fichero XML. Permite definir atributos y anidar otros elementos dentro de ellos. En la imagen inferior, los elementos del documento serían configuration, startup (que sería hijo directo de configuration) y supportedRuntime (que sería hijo directo de startup y nieto de configuration).
  • Atributo: asocia propiedades o características a un elemento, y se compone por un par clave-valor. En el caso inferior podemos ver algunos de los atributos, como “versión”, que será un atributo del elemento supportedRuntime y cuyo valor será “v4.0”.

XML

(más…)