domingo, 29 de noviembre de 2015

Receta C# No. 6-2: Inserción de Nodos en un Documento XML

Índice

1. Introducción
2. Palabras Clave
3. Problema
4. Solución
5. Discusión de la Solución
5.1 Generalidades
5.2 Métodos de manipulación de XmlDocument
5.2.1 Método CreateElement
5.2.2 Método CreateAttribute
5.2.3 Método CreateNode
5.3 La clase XmlNode
5.3.1 Método InsertBefore
5.3.2 Método InsertAfter
6. Práctica: Código C#
7. Conclusiones
8. Literatura & Enlaces

1. Introducción

Segunda receta de la serie de recetas orientadas a la manipulación de documentos XML con el lenguaje de programación C#. En esta oportunidad se estudia el proceso de inserción de nodos en un documento XML. Para ello es necesario conocer otros de los elementos programáticos que dispone .NET Framework a través de la clase XmlDocument del namespace System.Xml: CreateElement, CreateAttribute, CreateNode; y éstos en conjugación con InsertAfter, InsertBefore y AppendChild de la clase XmlNode.

2. Palabras Clave

  • Atributo
  • Documento XML
  • Elemento
  • Nodo
  • XML

3. Problema

Se requiere modificar el contenido de un documento XML para la inserción de nuevos datos. También es necesario crear un nuevo documento XML en la memoria de trabajo.

4. Solución

La clase XmlDocument (namespace System.Xml) cuenta con varios métodos para dar solución al problema planteado. Estos métodos comprende:
  • CreateElement
  • CreateAttribute
  • CreateNode
También será necesario usar el método AppendChild de la clase XmlNode.

5. Discusión de la Solución

5.1 Generalidades

El proceso de creación o inserción de nuevos datos en un documento XML sigue estos pasos básicos:
  1. Creación del nodo a insertar, e 
  2. Inserción en la ubicación que corresponda.

5.2 Métodos de manipulación de XmlDocument

La clase XmlDocument ("XmlDocument Class", 2015) posee los métodos CreateElement, CreateAttribute y CreateNode para crear elementos -elementos, atributos y nodos- en un documento XML.

5.2.1 Método CreateElement

El método CreateElement ("XmlDocument.CreateElement", 2015) cuenta hasta con tres versiones sobrecargadas:
Métodos sobrecargados de XmlDocument.CreateElement
Tabla 1. Métodos sobrecargados de XmlDocument.CreateElement ("XmlDocument.CreateElement", 2015).
Su utilidad es la de crear elementos para la estructura de un documento XML.

5.2.2 Método CreateAttribute

De manera análoga al método anterior, con el método CreateAttribute ("XmlDocument.CreateAttribute", 2015) es posible crear atributos para nodos de un documento XML. También cuenta hasta con tres versiones sobrecargadas:
Métodos sobrecargados de XmlDocument.CreateAttribute
Tabla 2. Métodos sobrecargados de XmlDocument.CreateAttribute ("XmlDocument.CreateAttribute", 2015).

5.2.3 Método CreateNode

Al contar con una instancia de la clase XmlDocument se puede usar la invocación de una de las versiones sobrecargadas de CreateNode ("XmlDocument.CreateNode", 2015) 
Métodos sobrecargados de XmlDocument.CreateNode
Tabla 3. Métodos sobrecargados de XmlDocument.CreateNode ("XmlDocument.CreateNode", 2015).
para crear un nuevo nodo que formará parte de un documento XML especificado en la instanciación de un objeto de la clase XmlDocument.

5.3 La clase XmlNode

La clase XmlNode ("XmlNode Class", 2015) representa un nodo individual de un documento XML. Dos de sus métodos son útiles para especificar la ubicación de la estructura del documento XML donde debe ser insertado un nodo específico respecto a otro:
  • InsertBefore e
  • InsertAfter

5.3.1 Método InsertBefore

Con el método InsertBefore ("XmlNode.InsertBefore", 2015) se inserta un nodo específico antes de otro.

Sintaxis de declaración:

public virtual XmlNode InsertBefore(
XmlNode newChild,
XmlNode refChild
)

Parámetros:
  • newChild: es el nuevo nodo a insertar inmdiatamente antes de refChild.
  • refChild: es la referencia al nodo que irá inmediatamente después de newChild.

5.3.2 Método InsertAfter

El método InsertAfter realiza la operación opuesta al método InsertBefore, es decir inserta un nodo enseguida de otro.

Sintaxis de declaración:

public virtual XmlNode InsertBefore(
XmlNode newChild,
XmlNode refChild
)

Parámetros:
  • newChild: es el nuevo nodo a insertar inmediatamente delante de refChild.
  • refChild: es la referencia al nodo que irá inmediatamente después de newChild.

6. Práctica: Código C#

Es hora de crear código fuente C# para demostrar cómo usar los artefactos de la sección anterior y crear un archivo de tipo XML vacío para empezar a insertar elementos: elementos, atributos y valores.

En la línea 11 se crea un nuevo documento XML y acontinuación -línea 12- se especifica la declaración XML a usar a través del método CreateXmlDeclaration. Más adelante, en la línea 15 se inserta este nuevo nodo en el documento XML con la invocación del método AppendChild. Hasta aquí ya se tiene la estructura básica del documento XML.


A continuación, específicamente en la línea 18 se crea un nuevo nodo con el nombre Productos. A este elemento se agregarán los demás elementos. La agregación de los elementos se realiza creando nuevos nodos -líneas 22 y 37-  llamados Producto. A cada uno de estos nuevos nodos se les agrega otros nodos para el nombre del producto -líneas 30 y 44-, y su precio -líneas 33 y 47-.


Compilación: 

csc /t:exe CreacionDocumentoXml.cs


Ejecución assembly:

.\CreacionDocumentoXml.exe


> Prueba de ejecución (ideone.com): 

http://ideone.com/I1rGYA


> Prueba de ejecución (local):
Ejecución assembly CreacionDocumentoXml.exe
Figura 1. Ejecución assembly CreacionDocumentoXml.exe.

7. Conclusiones

Esta receta fue de utilidad para comprender el proceso de creación de un documento XML y la inserción de nodos en su estructura. La clase XmlDocument provee la infraestructura programática para llevar a cabo estas tareas de forma intuitiva y eficiente. En la sección práctica se demostró lo anterior por medio de la especificación de estructura y carga de datos de productos de una cafetería. La próxima receta se orientará a adjuntar nodos de forma más ágil sobre un documento XML.

8. Literatura & Enlaces

Jones, A., Freeman (2010). Visual C# 2010 Recipes: A Problem-Solution Approach. United States: Apress.
XmlDocument Class (System.Xml) (2015, noviembre 29). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx.
XmlDocument.CreateElement Method (System.Xml) (2015, noviembre 29). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createelement(v=vs.110).aspx.
XmlDocument.CreateAttribute Method (System.Xml) (2015, noviembre 29). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createattribute(v=vs.110).aspx.
XmlDocument.CreateNode Method (System.Xml) (2015, noviembre 29). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.createnode(v=vs.110).aspx.
XmlNode Class (System.Xml) (2015, noviembre 29). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmlnode(v=vs.110).aspx.
XmlNode.InsertBefore Method (XmlNode, XmlNode) (System.Xml) (2015, noviembre 29). Recuperado desde: https://msdn.microsoft.com/en-us/library/system.xml.xmlnode.insertbefore(v=vs.110).aspx.


V

No hay comentarios:

Publicar un comentario

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