Índice
1. Introducción2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Constructores de XElement
5.2 Método Add
6. Práctica: Creación de un Árbol XML con LINQ
7. Conclusiones
8. Literatura & Enlaces
1. Introducción
Con esta nueva receta C# el programador explora los aspectos programáticos para crear un nuevo árbol XML usando varias de las construcciones de creación de elementos, atributos, datos; todos disponibles a través de las distintas clases del namespace System.Xml.Linq. El aspecto de aprendizaje principal en esta receta es usar LINQ para estructurar el documento XML a través de código. La sección práctica describe cómo crear la estructura del documento XML CatalogoProductos.xml estudiado en recetas previas.
2. Palabras Clave
- Árbol XML
- Atributo
- Elemento
- LINQ
- XML
3. Problema
Crear un árbol XML usando el lenguaje de consulta integrado LINQ.
4. Solución
A través de una de las versiones sobrecargadas del constructor de la clase XElement se puede construir un árbol XML con elementos y atributos.
5. Discusión de la Solución
5.1 Constructores de XElement
La clase XElement ("XElement Class", 2016) posee las siguientes versiones sobrecargadas de su constructor ("XElement Constructor", 2016):
Figura 1. Constructores de XElement ("XElement Constructor", 2016). |
La versión XElement(XName, Object[]) es la sobrecarga que se utilizará en la sección práctica, y es la que permite incluir el nombre del elemento raíz -XName- junto con un arreglo de objetos -Object[]- que puede contener atributos y otros elementos de la estructura global del documento.
Por ejemplo, se puede escribir
XElement elementoRaiz = new XElement("nodoRaiz",
new XAttribute("primerAtributo", "primerValorAtributo"),
new XAttribute("segundoAtributo", "segundoValorAtributo"),
new XElement("primerElemento", "valorPrimerElemento"),
new XElement("segundoElemento", "valorSegundoElemento",
new XAttribute("atributoAnidado", "valorAtributoAnidado"))
);
Este modo de construir un árbol XML sigue el mismo enfoque de creación de un documento XML: por ejemplo se puede crear un elemento con atributos y otros elementos anidados. Evidentemente construir un objeto a nivel programático puede resultar tedioso, dado que se podría cometer un error, por ejemplo de anidación, y generar una estructura que no sigue una especificación en particular. Con práctica y persistencia todo objetivo es posible.
El código escrito anteriormente forma un árbol XML como el siguiente:
<nodoRaiz primerAtributo="valorPrimerAtributo" segundoAtributo="valorSegundoAtributo">
<primerElemento>valorPrimerElemento</primerElemento>
<segundoElemento atributoAnidado="valorAtributoAnidado">valorSegundoElemento</segundoElemento>
</nodoRaiz>
5.2 Método Add
Con el método sobrecargado Add ("Xelement.Add Method", 2016) se puede usar LINQ para la agregación de contenido anidado sobre elemento raíz XElement. Entre los tipos permitidos de adición se hallan:
- XAttribute,
- XElement,
- XComment,
- XDeclaration, y
- XCData
6. Práctica: Creación de un Árbol XML con LINQ
En el ejemplo que viene a continuación se usan los dos enfoques presentados en la sección teórica previa. Esto con el propósito de demostrar las capacidades de LINQ sobre el estándar XML.
Las líneas 12-20 crea el elemento raíz -Productos-, y enseguida se agrega un elemento tipo Producto con estas características:
- ID,
- NombreProducto,
- Descripcion,
- Precio, y
- Disponible
Esta primera parte del código aplica el enfoque basado en constructor -el explicado en el sección de discusión 5.1.
Más adelante, en las líneas 23-28, se usa el método sobrecargado Add de XElement para permitir la agregación progresiva de elementos y atributos al elemento Producto creado en la línea 23. Con la línea 30 se agrega este último elemento a la estructura arbórea del elemento raíz Productos.
Antes de finalizar, sobre las líneas 32-35 se crea el documento XML con la especificación declarativa de la versión del documento.
Compilación:
csc /t:exe CreacionArbolXml.cs
Ejecución assembly:
.\CreacionArbolXml.exe
La salida del árbol construido con los elementos de programa contenidos en el namespace System.Xml.Linq se contrasta con la estructura formada en el documento XML CatalogoProductos.xml.
7. Conclusiones
Se comprendió cómo a través de elementos de programa del namespace System.Xml.Linq es posible construir un árbol XML con elementos declarativos, de objetos, y atributos. Se exploraron dos enfoques programáticos prácticos para la constitución de la jerarquía de un documento de este formato estándar.
La siguiente receta será aún más interesante: se usará LINQ para consultar por el contenido de un documento XML.
8. Literatura & Enlaces
Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.XElement Class (System.Xml.Linq) (2016, junio 14). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.linq.xelement(v=vs.110).aspx
XElement Constructor (System.Xml.Linq) (2016, junio 14). Recuperado desde: https://msdn.microsoft.com/en-us/library/bb358354(v=vs.110).aspx
XElement.Add Method (System.Xml.Linq) (2016, junio 14). Recuperado desde: https://msdn.microsoft.com/en-us/library/Bb551367(v=vs.110).aspx
V
No hay comentarios:
Publicar un comentario
Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.